【发布时间】:2012-10-31 07:55:18
【问题描述】:
我使用了一个使用 mdi 的应用程序,并且脚本可以附加到 mdi 窗口或从 mdi 窗口分离,以便按需运行/停止;这个脚本加载我的 dll 做一些工作;这样做很好;但是,当我分离脚本时,一切都很好,应用程序应该卸载 dll(并使用适当的 thread_attach/detach 和 process_attach/detach 操作调用 dllmain)。现在,如果我尝试将脚本重新附加到 winow,或将其附加到另一个窗口,在 dll 已使用一次之后 - 主应用程序崩溃。我已将问题隔离到由 dll 创建的线程;踏板打开了一扇窗户;所以,我像这样创建线程:
if (!hThread) hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
并且,当脚本被分离时,它会像这样关闭线程(无论注释掉的行是否未被注释掉):
SendMessage(hWnd, WM_DESTROY, 0, 0);
//TerminateThread(hThread, 0);
//WaitForSingleObject(hWndThread, INFINITE);
CloseHandle(hThread);
hThread = NULL;
我不知道为什么主应用程序崩溃了。一个不同的线程(即一个简单地休眠一秒钟并循环的线程,不会造成任何伤害。什么给出了?
【问题讨论】:
-
@Hans Passant 感谢您查看我的问题。不幸的是,发送 WM_CLOSE 或调用 DestroyWindow 并不能解决问题。
-
好吧,我们都知道你做错了,但我们仍然不知道崩溃是什么样子。至少发布崩溃原因和调用堆栈的内容。还要在“输出”窗口中查看任何第一次机会异常通知。
-
@Hans 我无法控制主机应用程序;我贡献的只是脚本和它使用的 DLL。由于应用程序崩溃,没有反馈:D 据我所知,我正在销毁我应该销毁的所有数据。没有线索。