C#调用C++dll 中具有高维指针参数的接口函数
首先需要说明的是,这里的指针指向的都是基本类型,或基本类型的指针。
如果接口函数中有一维指针做参数,那么可以在C#中对应的声明中添加关键字ref。
如果是高维指针,那么上述方法就不行了。可采用如下两种做法。
做法一:如果高维指针指向的内存地址连续,考虑将指针转换为数组传递。C++中的多维数组与C#中的多维数组均是结构一致的连续内存块。因此只要两边数组各维大小均相同的情况下,可以直接传递。该方法操作简单,可以首先考虑。
C++代码:
extern "C" __declspec(dllexport) void fun(int a[][]);
C#代码:
public static extern void fun(int[,] a)
做法二:使用非安全代码。
C++代码:
extern "C" __declspec(dllexport) void fun(int** a);
C#代码:
public static extern unsafe void fun(int** a);
<