1

链接到我创建的 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 窗口应用程序中运行良好。

任何帮助,将不胜感激。

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

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

我使用 ACE 配置框架,因此我使用 svc.conf 文件动态加载我的 DLL。这是唯一需要写入main控制台程序功能的代码行。

在捕获 WM_CREATE 消息后,我尝试编写此行。它崩溃了。

4

1 回答 1

2

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

于 2013-03-29T08:04:02.293 回答