C# clr宿主:将委托回调给本机 我正在编写一个本地C++代码,它使用DOM NETCLR,使用COM接口(受示例启发)

C# clr宿主:将委托回调给本机 我正在编写一个本地C++代码,它使用DOM NETCLR,使用COM接口(受示例启发),c#,c++,delegates,interop,clr,C#,C++,Delegates,Interop,Clr,我想给本机部分一个指向委托的指针,然后让本机部分调用该委托 委托是:void MyDelegate(字符串[]args) 让我试着解释一下: 初始化时,我有一个方法,该方法将托管部件委托给本机函数进行回调注册,因此我的回调可以这样注册: public void RegisterCallback(MyDelegate cb) { this.Native_Register(cb); } 我的母语是: void* _cb = NULL; void Native_RegisterCallbac

我想给本机部分一个指向委托的指针,然后让本机部分调用该委托

委托是:
void MyDelegate(字符串[]args)

让我试着解释一下: 初始化时,我有一个方法,该方法将托管部件委托给本机函数进行回调注册,因此我的回调可以这样注册:

public void RegisterCallback(MyDelegate cb)
{
    this.Native_Register(cb);
}
我的母语是:

void* _cb = NULL;
void Native_RegisterCallback(void* pCallback)
{
    _cb = pCallback;
}
当我尝试调用该回调时,我有:

void Raise_Callback(int argc, char** argv)
{
    if(_cb)
    {
        // Create a string array
        // call the callback
    }
}
从本机引发托管回调的最佳/推荐方法是什么?
我试过使用类型变量、安全数组。。。已尝试stdcall、cdecl。。。始终存在运行时错误…

请使用Marshal.GetFunctionPointerForDelegate()。并确保只要本机代码可以进行回调,GC就可以看到对委托的引用。将其存储在静态变量中或使用GCHandle.Alloc()。我找到了这个示例来解释您的注释:但仍然存在参数问题:我如何将字符串数组作为参数……正如所写的那样,封送拆收器永远无法计算数组中有多少个元素。您需要一个额外的参数来指示数组的长度。argc参数。用[Marshallas],SizeParamIndex属性注释数组。我已经放弃了:我没有传递委托指针,而是使用了一个int id的字典。。。