如何把返回 c++结构数组指针,c#结构数组??
c++定义:
QUERY* QueryTransactionHistory(DWORD dwIP,int nPort,TRANSACTION
* ,int* outNum,int* nErrorCode);
TRANSACTION 结构:
typedef struct TRANSACTION
{
char account[19];
int maxNum;
char startDate[16];
char endDate[16];
}TRANSACTION;
QUERY 结构:
typedef struct QUERY
{
int id;
int itemAmount;
int gold;
int silver;
char itemName[30];
}QUERY;
解决方案:
1. 因为返回的数组是变长的,所以 DllImport 函数声明不能用数组作返回类型。
必须使用 IntPtr 指针做返回值,然后用 Marshal.PtrToStructure 读取结构内容。
2. 如果你在 C 代码中用 malloc 申请的返回内存,那么记得提供一个释放该内存
的 C 函数,否则会有内存泄漏。如果用的是 WindowsAPI,可以再 C#中用
Marshal.FreeHGlobal 释放。
C#代码:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public class TRANSACTION
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 19)]
public string account;
public int maxNum;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
评论0
最新资源