C#调用C++ DLL动态链接库如何回传数组
参考:https://www.cnblogs.com/zhaox583132460/p/3402243.html
使用C#中的GCHandle类,解决数组数据传回。
C#中的数组int[] 用GCHandle 转换成非托管
C++ 内部的函数
extern "C" __declspec(dllexport) void __stdcall
function(int* retriveData, int idataCount)
{
for(int i = 0; i < idataCount, i++)
{
retriveData[i] = 100;
}
}
c#端
public class LibFunction
{
[DllImport("cplusDll", EntryPoint = "function"]
public static extern void function(IntPtr retriveData, int idataCount);
}
class Program
{
static void Main(string[] args)
{
int dataCount = 10;
int[] data = new int[dataCount];
GCHandle gch = GCHandle.Alloc(data); //将托管内存中的数据pin住,确保在dll中地地址不变
LibFunction.function(gch.AddrOfPinnedObject(), idataCount);
foreach(int i in dataCount)
{
Console.write(data[i].toString());
}
gch.Free(); //释放
}
}