GameMaker Studio,从 Windows DLL 创建异步事件

GameMaker Studio, Create Async Event from Windows DLL

我正在尝试从 Windows 上的 DLL 触发 社交异步事件 。底部有这个here的教程。

下面是我没看懂的地方

When your extension is loaded this callback should fire immediately and be passed in pointers to the four functions.

我想我应该从 GML 调用函数 (RegisterCallbacks),因为回调被定义为 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;
}

但是我应该如何从 GML 传递指向 "CreateAsynEventWithDSMap" 的指针?我从哪里获得这些功能?

老问题,但我自己最近也遇到了这个问题,花了几天时间挠头,所以我想我会post记录答案。

首先,DLL 中的 RegisterCallbacks 函数需要是 __declspec (dllexport) 和 extern "C",就像任何其他导出到 GM 的函数一样。

其次,RegisterCallbacks 函数也应该在 GM 中定义,而不仅仅是在 C/C++ 文件中,就像扩展中的任何其他导出函数一样。四个参数应定义为字符串类型。它应该是这样的:http://i.imgur.com/pppbsWa.png

现在,RegisterCallbacks 应该会在您开始游戏时自动触发,并且执行异步操作的 DsMap 函数应该可以正常工作。不要尝试手动调用 RegisterCallbacks()。