【问题标题】:Unhandled exception linking to DLL链接到 DLL 的未处理异常
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 成功了。非常感谢。顺便说一句,我还有一个 ACE 问题,您似乎对 ACE 很有经验,所以我想知道您是否也可以帮我解决这个问题。
  • 问题的链接是:stackoverflow.com/questions/15705227/…。非常感谢。
  • 刚刚在此处添加了评论,ACE 邮件列表确实是一个更好的提问场所。
猜你喜欢
  • 2013-10-23
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
相关资源
最近更新 更多