我正在尝试使用C++/CLI互操作层从C#应用程序调用现有的C++库。我有一个类似于以下内容的C++函数:
void doSomething(int* foo, int size);
这是一个包含两个字段的C#对象,分别是IntPtr start和int size。我编写了一个托管的C++类,代码如下:
public ref class Wrapper {
public:
void run(System::IntPtr itn, int size);
};
现在我想在Wrapper::run中调用doSomething函数,并使doSomething函数能够访问C#对象指向的相同数据块。如果不进行复制,那么我想做的这件事是否可能?如果可能,该如何实现?
void run(int% itn, int size)
?如果不是,那么就需要有人来固定内存。请不要忽略这个要求,最好在 C++/CLI 中使用 pin_ptr<> 来完成,这样 C# 代码就可以简单地使用 int[]。 - Hans Passant