2015-09-29 75 views
1

我有一個WPF C#應用程序,面向.Net框架的版本4.5。我的應用程序正在調用一個未管理的DLL,除了一個方法外,其他方法都正常。當我打電話問題的方法我的過程退出沒有任何例外,退出代碼是:1073741855 (0x4000001f)調用非託管dll殺死進程而不產生異常

我已閱讀關於<legacyCorruptedStateExceptionsPolicy>元素,並已將其添加到我的app.config文件。我在異常設置對話框中打開了所有異常(我正在使用VS2015,順便說一下)。在這一點上,我已經用盡技術來確定導致過程退出的原因。

更新:我偶然嘗試打開在項目設置中啓用原生代碼調試,現在收到以下異常:

異常在0x77CBED0B(ntdll.dll中)在 SK.UnmanagedDLLExceptionTest.exe拋出: 0xC0000374:堆被損壞(參數:0x77CF4270) 。

鑑於上述信息,你們有沒有人知道任何其他技術可以用來將額外的細節帶到表面?

如果你有興趣(並願意)我已經創建了一個展示問題的簡單的控制檯應用程序,download here

回答

1

通過打開「啓用原生代碼調試」項目設置我能有以下異常泛起:

異常在 SK.UnmanagedDLLExceptionTest.exe在0x77CBED0B(NTDLL.DLL)拋出:0xC0000374:堆已經 損壞(參數:0x77CF4270)

儘管這肯定不是個好消息,但它確實提供更多的細節,並引導我在一個行爲異常的DLL的方向。

1

如果您實際上沒有捕捉到任何東西,catch傳統標誌不起作用。

該錯誤似乎解碼爲DLL未找到。

這是一個32位的DLL,你編譯爲任何CPU。如果你有x64(你可能會這樣做),這就是問題所在。特別編譯爲x86。

如果你把catch放在那裏,它仍然沒有幫助,因爲綁定在方法入口(在到達try之前)被編譯。

+0

聽起來很有希望。我提出了你所建議的改變,但我也遇到了同樣的結果。在項目設置頁面中,我注意到「啓用本地代碼調試」選項並嘗試使用,導致以下異常: SK.UnmanagedDLLExceptionTest.exe中的0x77CBED0B(ntdll.dll)引發異常:0xC0000374:堆已損壞(參數:0x77CF4270)。 –

+0

那麼你遇到了嚴重的麻煩。該DLL損壞了進程堆或其他東西。 – Joshua

+0

我被洗了。 :)我發現突破是打開啓用本機代碼調試選項。感謝您的幫助,但我很感激 –