GameMaker Studio, создание асинхронного события из Windows DLL

Я пытаюсь уволить Социальное асинхронное событие из DLL на Windows. Для этого есть учебник Вот внизу.

Что я не понимаю, так это следующее

Когда ваше расширение загружено, этот обратный вызов должен сработать немедленно
и быть переданы в указателях на четыре функции.

Я думаю, что я должен вызвать функцию (RegisterCallbacks) из GML, так как обратный вызов определяется как dllexport.

Вот функция обратного вызова

__declspec (dllexport) void RegisterCallbacks(char *arg1, char *arg2, char *arg3, char *arg4 )
{
void (*CreateAsynEventWithDSMapPtr)(int,int) = (void (*)(int,int))(arg1);
int(*CreateDsMapPtr)(int _num,...) = (int(*)(int _num,...)) (arg2);
CreateAsynEventWithDSMap = CreateAsynEventWithDSMapPtr;
CreateDsMap = CreateDsMapPtr;

bool (*DsMapAddDoublePtr)(int _index,char *_pKey,double value)= (bool(*)(int,char*,double))(arg3);
bool (*DsMapAddStringPtr)(int _index, char *_pKey, char *pVal)= (bool(*)(int,char*,char*))(arg4);

DsMapAddDouble = DsMapAddDoublePtr;
DsMapAddString = DsMapAddStringPtr;
}

Но как мне передать указатель на «CreateAsynEventWithDSMap» из GML? Где я могу получить эти функции?

1

Решение

Старый вопрос, но недавно я сам столкнулся с этой проблемой и потратил пару дней на то, чтобы почесать голову, так что я решил опубликовать ответ для записи.

Прежде всего, функция RegisterCallbacks в DLL должна быть __declspec (dllexport), а также иметь внешнюю «C», как любая другая функция, экспортируемая в GM.

Во-вторых, функция RegisterCallbacks также должна быть определена в GM, а не только в файле C / C ++, опять же, как и любая другая экспортируемая функция в расширении. Четыре аргумента должны быть определены как строковый тип. Это должно выглядеть так: http://i.imgur.com/pppbsWa.png

Теперь RegisterCallbacks должен запускаться автоматически при запуске игры, а функции DsMap для выполнения асинхронных операций должны работать. Не пытайтесь вызывать RegisterCallbacks () вручную.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]