C++ 链接到DLL的未处理异常

C++ 链接到DLL的未处理异常,c++,multithreading,winapi,console-application,ace,C++,Multithreading,Winapi,Console Application,Ace,我链接到我创建的DLL时出现问题。引发的异常是0x000007FA17461069(ntdll.dll)处的未处理异常。奇怪的是,只有在win32应用程序中链接DLL,而不是在win32控制台应用程序中链接DLL时,才会发生这种情况。问题似乎与线程创建有关 调用堆栈如下所示: msvcr110d.dll!_callthreadstartex() Line 354 C msvcr110d.dll!_threadstartex(void * ptd) Line 337

我链接到我创建的DLL时出现问题。引发的异常是0x000007FA17461069(ntdll.dll)处的未处理异常。奇怪的是,只有在win32应用程序中链接DLL,而不是在win32控制台应用程序中链接DLL时,才会发生这种情况。问题似乎与线程创建有关

调用堆栈如下所示:

msvcr110d.dll!_callthreadstartex() Line 354            C
msvcr110d.dll!_threadstartex(void * ptd) Line 337      C
DLL包含ACE proactor框架的实现,使用操作系统I/O完成端口。它在控制台应用程序中运行正常,但在win32窗口应用程序中运行不正常

任何帮助都将不胜感激

编辑:根据以下评论的要求:

引发异常的代码行是
ACE_Service_Config::open(GetCommandLineA())

我使用ACE配置框架来动态加载带有svc.conf文件的DLL。这是唯一需要写入console程序的
main
功能的代码行


在WM_CREATE消息被捕获后,我尝试写这行。它崩溃。

当您创建控制台应用程序时,ACE将重新定义main以确保它正确初始化。制作win32 windows应用程序时,此技巧不起作用。您必须自己调用ACE::init()和ACE::fini(),请参见ACE_wrappers/tests/ACE_init_Test.cpp以获取如何执行此操作的示例。

如果在发布模式而不是调试模式下运行,会发生什么?找出引发异常的位置。确保您使用的是针对相同DLL链接的DLL和EXE,例如,一个使用的不是调试变量,而是另一个。检查日志以确定加载了哪个DLL。找出工作版本和非工作版本之间的确切差异。查找引发异常的代码。提取一个最简单的例子,并在这里发布。@Arun:mmm。。。我还没试过。我试试看。但是,在发布模式下运行它时,我必须重建我的所有库,这需要一些时间。发布模式和调试模式之间有什么区别吗?@doomster:所有库都是在调试模式下构建的,平台为x64。当你说“链接到DLL”时,你的意思是崩溃发生时,你没有调用/运行DLL中的任何代码吗?是的。谢谢。顺便说一句,我还有一个ACE问题,你似乎对ACE很有经验,所以我想知道你是否也能帮我解决这个问题。这个问题的链接是:。非常感谢。刚刚在那里添加了一条评论,ACE邮件列表确实是一个更好的询问地方。