【发布时间】:2016-09-17 14:28:18
【问题描述】:
因此,我希望能够在运行时更改应用程序的行为,而无需使用任何外部脚本语言。为了实现这一点,我尝试使用 DLL。我有类似的东西:
begin program;
load dll and function pointers;
init_func_ptr();
loop:
if(compiled_new_version)
{
pause threads;
unload dll;
overwrite expired dll with new dll;
load dll and function pointers;
resume threads;
}
update_func_ptr(state);
最初我没有任何问题。但是,一旦我编写了一些实际代码,我在重新加载 dll 后就开始崩溃。只有我手动导出/重新加载的函数指针是“初始化”和“更新”。
关于我遇到的崩溃的一些信息。它在不知名的地方崩溃,调用堆栈中有一堆地址为“0xCDCDCDCD”的条目(值得一提的是,当我使用 Visual Studio 作为调试器并且应用程序在调试模式下编译时会发生这种情况)。
我认为发生的情况是,当我暂停线程时,其中一个或多个线程正在过期 dll 中执行一些代码,因此当我卸载该 dll 并恢复线程时,它们会导致崩溃。
我该如何解决这个问题?
【问题讨论】:
-
不要发布伪代码,而是您的实际代码的minimal reproducible example。见How to Ask