从本机代码调用托管委托

时间:2016-05-04 17:09:34

标签: c# c++ garbage-collection

我有一个本机函数,它接受一个指向函数的指针,应该在整个生命周期中定期调用它。此函数从定义它的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。我的猜测是垃圾收集器移动包含委托的对象,本机代码有一个松散的引用。

我很感激有关如何继续的任何指示。

0 个答案:

没有答案