Я пытаюсь уволить Социальное асинхронное событие из 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? Где я могу получить эти функции?
Старый вопрос, но недавно я сам столкнулся с этой проблемой и потратил пару дней на то, чтобы почесать голову, так что я решил опубликовать ответ для записи.
Прежде всего, функция RegisterCallbacks в DLL должна быть __declspec (dllexport), а также иметь внешнюю «C», как любая другая функция, экспортируемая в GM.
Во-вторых, функция RegisterCallbacks также должна быть определена в GM, а не только в файле C / C ++, опять же, как и любая другая экспортируемая функция в расширении. Четыре аргумента должны быть определены как строковый тип. Это должно выглядеть так: http://i.imgur.com/pppbsWa.png
Теперь RegisterCallbacks должен запускаться автоматически при запуске игры, а функции DsMap для выполнения асинхронных операций должны работать. Не пытайтесь вызывать RegisterCallbacks () вручную.
Других решений пока нет …