问题: 使用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地址
}
另外, 在传递参数时,原C++接口为一个结构体的

本文探讨了如何在C#中调用非托管的VC++ DLL,特别是处理结构体指针参数的问题。重点在于C++结构体中的char[]数组在C#中的映射方式,以及C#中使用ref关键字传递指针类型参数的方法。通过添加WINAPI声明解决了调用时的不一致类信息异常。
最低0.47元/天 解锁文章
4283

被折叠的 条评论
为什么被折叠?



