2013-03-28 45 views
1

當我鏈接到我創建的DLL時,出現問題。拋出的異常是Unhandled exception at 0x000007FA17461069 (ntdll.dll)。奇怪的是,這隻會發生,如果我在win32應用程序鏈接DLL,而不是在win32控制檯應用程序。這個問題似乎是處理線程創建的問題。鏈接到DLL的未處理的異常

調用棧如下:

msvcr110d.dll!_callthreadstartex() Line 354   C 
msvcr110d.dll!_threadstartex(void * ptd) Line 337  C 

的DLL包含實現爲ACE攝器框架,使用該操作系統的I/O完成端口。它在控制檯應用程序中運行良好,但不在win32窗口應用程序中運行。

任何幫助,將不勝感激。

編輯:通過下面的評論的要求:

的拋出異常的代碼行是ACE_Service_Config::open(GetCommandLineA());

我用ACE配置框架,所以我動態加載DLL我用的svc.conf文件。這是唯一需要寫入控制檯程序的main功能的代碼行。

我試圖在WM_CREATE消息被捕獲後寫這行。它崩潰。

+0

如果在發佈模式而不是調試模式下運行,會發生什麼? – Arun 2013-03-28 03:22:52

+0

找出拋出異常的位置。確保您使用的DLL和EXE鏈接的是相同的DLL,例如一個使用調試版,但不使用其他版本。檢查日誌以確定哪個DLL正確加載。找出工作和非工作版本之間的確切區別在哪裏。找到拋出異常的代碼。提取一個最簡單的例子並在這裏發佈。 – 2013-03-28 05:20:41

+0

@ Arun:嗯......還沒有嘗試過。我會嘗試。但是,在發佈模式下運行它時,我將不得不重建所有需要一些時間的庫。發行版和調試模式有什麼區別嗎? – l3utterfly 2013-03-28 05:21:32

回答

2

當您創建控制檯應用程序時,ACE將重新定義main以確保其被正確初始化。當製作一個win32的Windows應用程序時,這個技巧是行不通的。您必須親自調用ACE :: init()和ACE :: fini(),請參閱ACE_wrappers/tests/ACE_Init_Test.cpp以獲取如何執行此操作的示例。

+0

做到了。非常感謝。順便說一句,我有另一個ACE問題,你對ACE很有經驗,所以我想知道你是否可以幫助我解決問題。 – l3utterfly 2013-03-29 14:16:08

+0

問題的鏈接是:http://stackoverflow.com/questions/15705227/unhandled-exception-when-using-ace-service-config。非常感謝。 – l3utterfly 2013-03-29 14:26:49

+0

剛剛在那裏添加了一條評論,ACE郵件列表真的是一個更好的地方要問。 – 2013-03-29 15:04:04