在gdnative里卸载自身dll
imdjs
2018-12-20
在gdnative里卸载自身dll,而不用重启godot
godot的gdnative库是以dll的动态链接库的形式载入到主程序的.所以一但打开了godot成功载入了dll 那么,就无法重新编译dll的代码,直到关闭godot,dll从内存卸载才可以重编译.
我也没有在gdnative的相关代码里找到可以用脚本卸载dll的方法.于是百度了一下.找到一个可以用dll卸载自身的方法.也就是这个卸载的函数是在dll自己的代码里.
HMODULE hmSelfG=NULL; //====Unload Self dll ==================================== DWORD UnloadSelf(PVOID param) { FreeLibraryAndExitThread(hmSelfG, 0); return 0; } void UnloadSelfEX() { CloseHandle( CreateThread(NULL, 0, UnloadSelf, NULL, 0, NULL) ); } BOOL DllMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: { hmSelfG = (HMODULE)hinstDLL; //当dll加载到godot时,获取这个 dll句柄 break; } } return TRUE; }
当dll载入时 自动运行DllMain,并把自身的句柄保存到hmSelfG全局变量,当要卸载自己时,只要运行了UnloadSelfEX()函数就可以把自己卸载了.
(转发自:原日志地址)