我使用mingw 4.5.0编译DLL并将其用作Game Maker 8.0扩展。 Game Maker动态加载dll。一切似乎都有效(调用dll函数并提供正确的返回值),但是当我关闭Game Maker时会弹出一个对话框:“Microsoft Visual C ++运行时库”,“此应用程序已请求运行时以不寻常的方式终止。 “之后,该过程继续在后台停留几秒钟,然后消失。
当没有实际调用dll的所有函数时,也会发生这种情况。没有DllMain
,所有静态/全局变量都是基本数据类型或std::string
(当我删除std :: strings时,它实际上也会发生。)
dll与zlib和libpng静态链接。当我将-static传递给链接器(我假设)也静态链接运行时,问题似乎消失了。但是,这大大增加了我的DLL的大小,在我了解正在发生的事情之前,它最多只是一种解决方法。
关于可能是什么原因的任何想法?
更新:实际上,似乎问题只发生在Game Maker中加载两个扩展时:一个dll与-static链接,另一个没有。没有-static链接两者会使问题消失。但是,我仍然不明白这个问题,因为dll永远不会直接交互或共享数据结构。
更新2 :我最近发现这可能与Game Maker本身的奇怪行为有关。加载DLL时似乎没有正确初始化全局变量,如果全局对象试图释放他们不拥有的内存,则可能导致卸载崩溃。这意味着-static只是一个随机因素,它改变了全局变量所关联的未初始化内存的值。
更新3 :修改了以上内容以包含有关Game Maker扩展的信息,因为这可能与Update 2相关。