GameMaker Studio,从Windows DLL创建异步事件
GameMaker Studio, Create Async Event from Windows DLL
我正试图从Windows上的DLL中触发社交异步事件。有一个教程在这里在底部。
我不明白的是下面的
当你的扩展被加载时,这个回调应该立即触发并将指针传递给这四个函数
我想我应该从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"?我从哪里得到这些函数?
老问题,但我最近也遇到了这个问题,花了几天时间挠头,所以我想我应该把答案贴出来记录。
首先,DLL中的RegisterCallbacks函数需要__declspec (dllexport),并且还需要extern "C",就像导出到GM的任何其他函数一样。
第二,registercallback函数也应该在GM中定义,而不仅仅是在C/c++文件中定义,就像扩展中任何其他导出函数一样。这四个参数应该定义为字符串类型。它看起来应该像这样:https://i.stack.imgur.com/FiHjV.png
现在,RegisterCallbacks应该在你启动游戏时自动触发,并且DsMap函数应该可以执行异步操作。不要尝试手动调用RegisterCallbacks()
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建 Spdlog 异步文件记录器时遇到困难
- 调用boost.asio的异步函数时,线程是什么时候创建的
- STD :: async的最大线程数量是多少,将异步创建和执行
- 异步服务器在创建boost :: asio后立即关闭
- C++ 异步创建对象
- 进行异步调用 - 我必须创建自己的p/s吗?
- QT-如何异步创建小部件
- 如何在C++中创建异步/等待代码
- hiredis Redis 库是否为异步回调创建了自己的线程
- Visual C++/CLI 中的异步睡眠,如何创建一个 X 毫秒来调用函数,而不会使 GUI 也停止
- 如何创建异步函数
- 我可以在 boost::asio 异步模式下创建和接受套接字时使用 boost::shared_ptr 吗?
- GameMaker Studio,从Windows DLL创建异步事件
- 如何在c++中创建异步函数