我有一个WPF应用程序,它调用本机DLL中的函数(用c ++编写)。 .DLL中的这个函数有时会执行一个杀死WPF应用程序的进程退出。
示例:
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退出的方法吗?
提前致谢,
答案 0 :(得分:3)
AppDomain.ProcessExitOk,使用AppDomain的问题是它们只适用于.NET程序集:(所以我必须创建一个程序集,通过P / Invoke加载我的本机DLL。一旦我有了,我可以加载程序集不同的AppDomin并调用本机.dll抛出托管.dll的函数。我从AppDomain捕获AppDomain.ProcessExit事件,我可以捕获退出;)。
感谢aiampogi的想法;)
答案 1 :(得分:1)
最重要的是,我唯一能想到的是将DLL加载到进程/应用程序域(更多地在appdomain上),然后调用该方法并注册ProcessExit事件以正确处理它。
我可能会在稍后尝试执行此操作,但我不确定您是否可以在appdomain上调用静态方法或在appdomain上调用非序列化类方法。