在gdnative里卸载自身dll,而不用重启godot
godot的gdnative库是以dll的动态链接库的形式载入到主程序的.如果是以gdnative写的插件,一但打开了godot成功载入了dll 那么,就无法重新编译dll的代码,直到关闭godot,dll从内存卸载才可以重编译.
我也没有在gdnative的相关代码里找到可以用脚本卸载dll的方法.于是百度了一下.找到一个可以用dll卸载自身的方法.也就是这个卸载的函数是在dll自己的代码里.
HMODULE hmSelfG=NULL;
//==== 卸载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 state, PVOID lpvReserved)
{
switch (state)
{
case DLL_PROCESS_ATTACH:
{
hmSelfG = (HMODULE)hinstDLL; //当dll加载到godot时,获取这个 dll句柄
break;
}
}
return TRUE;
} 当dll载入时 自动运行DllMain,并把自身的句柄保存到hmSelfG全局变量,当要卸载自己时,只要运行了UnloadSelfEX()函数(这个函数可以绑定到一个按键上) ,就可以把自己卸载了.当重编译代码后,按下play 就能重载入这个新的dll.
这个问题之前在论坛上提了,但没人回答,最终还是自己解决了
https://godotdevelopers.org/forum/discussion/20325/how-to-free-the-dynamic-library-that-has-been-loaded-into-the-gdnative


暂无关于此日志的评论。