我有一个本机函数,它接受一个指向函数的指针,应该在整个生命周期中定期调用它。此函数从定义它的dll导出。
现在,从托管代码我想以我的委托作为参数调用此函数。我的委托也是非静态委托(它引用 this )。
所以:
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate void MyDelegate([MarshalAs(UnmanagedType.LPWStr)] string myString);
[DllImport("mydll")]
public static extern int DelegateSet(MyDelegate);
public void MyFunc(string myString)
{
// Do something here.
}
// Somewhere in managed code:
DelegateSet(MyFunc);
这只适用于短时间内。本机代码调用此回调几次,然后我点击AV。我的猜测是垃圾收集器移动包含委托的对象,本机代码有一个松散的引用。
我很感激有关如何继续的任何指示。