4

我有一个 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 中此出口的方法吗?

提前致谢,

4

2 回答 2

3

AppDomain.ProcessExitOk,使用 AppDomain 的问题是它们仅适用于 .NET 程序集 :( 所以我必须创建一个程序集,通过 P/Invoke 加载我的本机 DLL。一旦有了,我可以在不同的 AppDomin 中加载程序集并调用本机 .dll 的函数抛出托管 .dll。我从 AppDomain 捕获 AppDomain.ProcessExit 事件,我可以捕获退出;)。

感谢aiampogi的想法;)

于 2013-05-28T12:10:15.720 回答
1

在我的脑海中,我唯一能想到的就是将该 DLL 加载到进程/应用程序域(更多关于应用程序域),然后调用该方法并注册 ProcessExit 事件以正确处理它。

稍后我可能会尝试这样做,但我只是不确定您是否可以在 appdomain 上调用静态方法或在 appdomain 上调用非序列化类方法。

于 2013-05-27T11:47:53.520 回答