当我链接到我创建的DLL时,我遇到了问题。抛出的异常是Unhandled exception at 0x000007FA17461069 (ntdll.dll)
。奇怪的是,只有在我在win32应用程序中链接DLL但不在win32控制台应用程序中链接时才会发生这种情况。问题似乎是处理线程创建的问题。
调用堆栈如下:
msvcr110d.dll!_callthreadstartex() Line 354 C
msvcr110d.dll!_threadstartex(void * ptd) Line 337 C
DLL包含使用操作系统I / O完成端口的ACE proactor框架的实现。它在控制台应用程序中运行良好,但在win32窗口化应用程序中运行不正确。
任何帮助都将不胜感激。
编辑:根据以下评论的要求:
抛出异常的代码行是ACE_Service_Config::open(GetCommandLineA());
我使用ACE配置框架,因此我使用svc.conf文件动态加载我的DLL。这是唯一需要写入控制台程序的main
函数的代码行。
我在捕获WM_CREATE消息后尝试编写此行。它崩溃了。
答案 0 :(得分:2)
当您创建控制台应用程序时,ACE将重新定义main以确保它已正确初始化。在制作win32 windows应用程序时,这个技巧不起作用。您必须自己调用ACE :: init()和ACE :: fini(),有关如何执行此操作的示例,请参阅ACE_wrappers / tests / ACE_Init_Test.cpp。