C# 调用C++接口时,类型对应翻译

chenjianyong94 2012-03-22 09:21:25
C++

typedef struct _sockaddr_my
{
short sin_family; //地址家族,AF_xxx
u_short sin_port; //端口号
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; //IP地址
char sin_zero[8];
}sockaddr_my;

typedef struct NewDHCP_Info
{
char hostmac[20];
sockaddr_my ipchange;
sockaddr_my submaskaddr;
sockaddr_my gatewayaddr;
sockaddr_my dnsaddr;
sockaddr_my dhcpaddr;
char domainame[128];
int Flag;
int messagetype;
unsigned char Devtype;
char strSN[256];
char strDescriptName[256];
char UserName[256];
char Password[256];
unsigned char cDhcpAble;
unsigned char sub_device_type;
}NEWDHCP_INFO;

typedef void (*fDeviceInfoCallBack)(NEWDHCP_INFO* dhcp_info);

ALKSDK_API int SetDeviceInfoCallBack(fDeviceInfoCallBack fun);


C#

public struct sockaddr_my
{
public Int16 sin_family;
public UInt16 sin_port;
public class S_un_b
{
public UInt16 s_b1, s_b2, s_b3, s_b4;
}
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 8)]
public string sin_zero;
}

[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class NewDHCP_Info
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 32)]
public string strhostmac;

public sockaddr_my ipchange;
public sockaddr_my submaskaddr;
public sockaddr_my gatewayaddr;
public sockaddr_my dnsaddr;
public sockaddr_my dhcpaddr;

[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 128)]
public string domainame;

public int Flag;
public int messagetype;
public byte Devtype;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 32)]
public string strSN;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 32)]
public string strDescriptName;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 32)]
public string strUserName;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 32)]
public string strPassword;
public byte cDhcpAble;
public byte sub_device_type;
}

请各位大侠给帮忙看看
我调用这个回调函数,老是不回调我写的函数
写这个C++的人说是类型翻译错来
...全文
156 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenjianyong94 2012-03-22
  • 打赏
  • 举报
回复
坐等高手
chenjianyong94 2012-03-22
  • 打赏
  • 举报
回复
那你帮我看看我哪些写的不对啊

写C++的人又不在同一个城市,虽同公司但又不认识

麻烦你们了哈

继续求解中
mathieuxiao 2012-03-22
  • 打赏
  • 举报
回复
我之前也碰到类似的问题,但是在网上也找不到现成的解决方案。最后就一个类型一个类型的测,你和C++的配合一下,让他为每个写个测试方法,测试方法只需要接受指定类型的参数,不用执行任何操作。然后你配参数调用,这样就可以判断到底是哪个类型出错,然后继续深入类型中的属性。
不过有的属性可以忽略比如int,short int什么的,关键是char,char*。另外如果结构中包含char的,在使用这个结构时也容易出错。
希望对你能有所帮助
chenjianyong94 2012-03-22
  • 打赏
  • 举报
回复
求解中
chenjianyong94 2012-03-22
  • 打赏
  • 举报
回复
算了,还是让大侠们救我吧
chenjianyong94 2012-03-22
  • 打赏
  • 举报
回复
大侠们就救救我吧
bdmh 2012-03-22
  • 打赏
  • 举报
回复
让他告诉你哪写错了,然后检查自己的回调过程是否写对了

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧