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

Posted

技术标签:

【中文标题】GameMaker Studio,从 Windows DLL 创建异步事件【英文标题】:GameMaker Studio, Create Async Event from Windows DLL 【发布时间】:2016-11-02 09:03:03 【问题描述】:

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

我不明白的是以下内容

加载您的扩展程序后,此回调应立即触发 并传入四个函数的指针。

我想我应该从 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”的指针?我从哪里获得这些功能?

【问题讨论】:

【参考方案1】:

老问题,但我最近自己也遇到了这个问题,花了几天时间摸不着头脑,所以我想我会发布答案以备不时之需。

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

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

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

【讨论】:

以上是关于GameMaker Studio,从 Windows DLL 创建异步事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GameMaker:Studio 1 中实现 3D 低分辨率效果

GameMaker Studio2 疑难杂症

GameMaker Studio 2 - 未找到路径

Gamemaker Studio 2 中的弹丸不动

Gamemaker Studio 2 位被随机删除

译文|GAMEMAKER STUDIO 系列:简单状态机