【发布时间】:2013-03-18 09:44:55
【问题描述】:
我在链接到我创建的 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 包含 ACE Proactor 框架的实现,使用操作系统 I/O 完成端口。它在控制台应用程序中运行良好,但在 win32 窗口应用程序中运行良好。
任何帮助将不胜感激。
编辑:根据以下 cmets 的要求:
引发异常的代码行是ACE_Service_Config::open(GetCommandLineA());
我使用 ACE 配置框架,因此我使用 svc.conf 文件动态加载我的 DLL。这是唯一需要写入控制台程序main函数的代码行。
在 WM_CREATE 消息被捕获后,我尝试编写此行。它崩溃了。
【问题讨论】:
-
如果在发布模式而不是调试模式下运行会发生什么?
-
找出抛出异常的位置。确保您使用的是针对相同 DLL 链接的 DLL 和 EXE,而不是例如一个使用调试变体,但不使用另一个。检查日志以找出究竟加载了哪个 DLL。找出工作版本和非工作版本之间的确切区别在哪里。找到引发异常的代码。提炼一个最小的例子并在这里发布。
-
@Arun:嗯……还没试过。我会试试看。但是,在发布模式下运行它时,我将不得不重建我的所有库,这将需要一些时间。发布模式和调试模式有什么区别吗?
-
@doomster:所有库都是在平台 x64 的调试模式下构建的
-
当你说“链接到 DLL”时,你的意思是在没有你从 DLL 调用/运行任何代码的情况下发生崩溃吗?
标签: c++ multithreading winapi console-application ace