2013-05-27 28 views
4

我有一個WPF應用程序正在調用本機DLL(用C++編寫)內的函數。 在.DLL中的這個函數有時做一個正在終止WPF應用程序的進程退出。如何檢測從C#中DLL退出進程

實施例:

WPF App: 
..... 
[DllImport("native.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] 
private static extern void NativeMethod(); 
..... 
void CallFunction() 
{ 
    //Call the native function 
    NativeMethod(); 
} 
.... 

的NativeMethod內有一個出口,我不能改變的.dll的源代碼。 任何人都知道一種方法來從.NET代碼捕獲DLL中的這個退出?

由於提前,

+1

除了一件事情,你無能爲力。扔掉DLL。 –

+0

嗨漢斯, 那麼有一些解決方案,即使他們不完美...我可以創建一個簡單的控制檯應用程序有一個代理的.dll所以會殺死控制檯應用程序進程,而不是主要過程...所以那裏是一些解決方案.. – rsantos

回答

3

AppDomain.ProcessExitOk,使用AppDomain的問題是他們只能使用.NET程序集:(所以我必須創建一個通過P/Invoke加載我的本地DLL的程序集。一旦我有了,我可以加載程序集一個不同的AppDomin並調用本地.dll的功能拋出託管的.dll。我從AppDomain捕獲AppDomain.ProcessExit事件,並且我可以捕獲出口;)。

感謝aiampogi的想法;)

1

在我的頭頂,我能想到的唯一的事情就是該DLL的進程/應用程序域(更多有關一個AppDomain)負載,然後調用該方法並註冊了ProcessExit事件來正確處理它。

我可能會在稍後嘗試這樣做,但我不確定您是否可以調用appdomain上的靜態方法或調用appdomain上的非序列化類方法。

+0

嗨aiampogi, 感謝您的反饋,你有任何代碼,我可以開始?我會繼續看你的想法,因爲看起來更好。 謝謝 – rsantos

+0

想想你已經做到了。恭喜!很高興我能幫助你。 – aiapatag