问题: 使用C#调用一个非托管的VC++的Dll,参数中包含一个结构体指针,C#如何与其对应?
该Dll导出接口:
BOOL GetLocalInfo(PLOCALINFO pLocalInfo);
其中,关于PLOCALINFO, 是这样定义的:
//C++的结构体,用此结构存储本地信息
typedef struct _Local_Info
{
char chMainMac[80]; //主Mac地址
char chHostName[80]; //主机名
char chIpAddress[80]; //IP地址
}LOCALINFO, *PLOCALINFO;
在C#中,需要定义同样的结构用接收返回的本地信息.
//C#中对应的结构, 存储本地信息的结构体,该结构体用于接收参数中的返回值
[StructLayout( LayoutKind.Sequential,Pack=1)]
public struct LOCALINFO
{
[MarshalAs( UnmanagedType.ByValTStr,SizeConst=80)]
public string chMainMac; //主Mac地址
[MarshalAs( UnmanagedType.ByValTStr,SizeConst=80)]
public string chHostName; //主机名
[MarshalAs(UnmanagedType .ByValTStr,SizeConst=80)]
public string chIpAddress; //IP地址
}