将数组从c++传递到c#

  • 本文关键字:c++ 数组 c# c++
  • 更新时间 :
  • 英文 :


我需要从c++传递一个数组到c#

c++头文件如下

extern "C" GMSH_API void GMSH_Model_OCC_Fragments(int* arrayPtr);

c++的cpp如下

void GMSH_Model_OCC_Fragments(int* arrayPtr)
{
int array[] = {1,2};
arrayPtr = array;
}

c#代码如下

[DllImport("GMSHCSHARP.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void GMSH_Model_OCC_Fragments(out IntPtr arrayPtr);     

public void Create()
{
GMSH_Model_OCC_Fragments(out IntPtr arrayPtr);
int[] ReturnArray = new int[2];
int size = Marshal.SizeOf(ReturnArray[0]) * ReturnArray.Length;
Marshal.Copy(arrayPtr, ReturnArray, 0, size);
}

似乎arrayPtr传播作为null,这使元帅。复制返回错误。

我很感激你的帮助。

当你从c#调用c++时,你必须遵守c++的规则,所以你不能通过

给数组赋值
arrayPtr = array;

你可以填充c#给出的数组

c++函数
void someFunction(char* dest, size_t length){
char* someData = "helloWorld";
size_t copyLen = std::min(length, strlen(someData));
memcpy(dest, someData, copyLen);
//If it was a string you'd also want to make sure it's null terminated
}

c#函数调用(类似于这样抱歉如果不是100%)

[DllImport("MyDll.dll", CallingConvention = CallingConvention.CDecl)]
private static extern void someFunction(Byte[] dest, uint Length);
Byte[] array = new byte[10];
someFunction(array, 10);

我不确定你是否可以通过堆内存的c++,但如果你可以,你会这样做:

void GMSH_Model_OCC_Fragments(int** dest){
*dest = new int[2];
*dest[0] = 1;
*dest[1] = 2;
}

注意,您需要使用双指针以这种方式传递内存。因为你需要第一个指针来引用对象或数组,第二个指针来跟踪对象或数组。

最新更新