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? Где взять эти функции?


person OCMvL    schedule 02.11.2016    source источник


Ответы (1)


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

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

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

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

person GrixM    schedule 23.01.2017