这是我的非托管代码:
delegate void MyDelegate(array<int>^% arguments);
typedef void (__stdcall *MyCallback)(array<int>^% arguments);
void Test(MyDelegate^ delegate)
{
MyCallback myCallback = static_cast<MyCallback>(Marshal::GetFunctionPointerForDelegate(delegate).ToPointer());
array<int>^ foo = gcnew array<int>(5);
foo[0] = 1;
foo[1] = 2;
foo[2] = 3;
foo[3] = 4;
foo[4] = 5;
myCallback(foo);
}
结果:
调用委托,但委托中参数的array.Length是1而不是5。数组中的第一个元素是正确的。回调后foo.Length()也是一个!谁能告诉我为什么?
更多信息:
我正在使用C ++ / CLI来包装C ++库,以便C#可以访问它。 C ++库使用成员函数指针(FastDelegate)来实现一种非托管“委托”。我需要提供其中一个“FastDelegate”成员函数指针,最终调用一个c#委托。为实现这一目标,我似乎需要做以下其中一项:
有什么想法吗?