在C#调用C++动态库时,通常需要从获取C++动态库获取数据,比如通过二级指针。
C++结构体如下:
struct DATA
{
int ID;
int iNum;
char* szName;
};
C++接口声明如下:
void GetDataList(DATA** pDate, int &iCount);
C#结构体声明如下:
public struct DATA
{
int ID;
int iNum;
string szName;
};
C#接口声明如下:
pulice extern static void GetDataList(ref IntPtr pData, ref int iCount);
接口实现:
void GetDataList(ref IntPtr pData, ref int iCount)
{
List<DATA> dataList = new List<DATA>();
for(int i=0; i<iCount; i++)
{
DATA data = (DATA)Marshal.PtrToStructure((IntPtr)((UInt32)ptr + i * Marshal.SizeOf(typeof(DATA))), typeof(DATA));
dataList .Add(data);
}
}
取出的数据保存在List列表,这里使用的是C++传回地址列表,再从地址列表取出数据。