问题描述
- c数据类型 如何转换为.net 数据类型
- //服务器登录地址
struct SERVADDR
{
char* m_szSerIp[IPADDR_MAXLEN]; // 定义了一个数组, 里面存储的是char 类型的指针
unsigned short m_nPort;
};struct MULSERVADDR
{
int m_nProxyType; //代理类型
char m_ucTimeOut; //如果为1就是需要用户验证 如果为0不需要用户验证char m_szUserName[USERNAME_MAXLEN]; //其中的szUserName为代理用户名 USERNAME_MAXLEN 代表首地址
char m_szUserCode[USERPWD_MAXLEN]; //szUserCode为代理用户密码
SERVADDR m_ProxyAddr;
int m_nNum; //下列地址数目
SERVADDR m_ServAddr[1]; //定义了一个 SERVADDR 数组
};我想把这两个c 结构体对应成 .net 的两个结构体,
它 在6 偏移位置包含一个偏移对象字段对象
有没有哪个大神帮我 把这两个结构体转换成.net 数据类型
解决方案
别用fieldoffset,人家有没有用union
解决方案二:
char* m_szSerIp[IPADDR_MAXLEN]; // 定义了一个数组, 里面存储的是char 类型的指针
对应C#应该是一个字符串,而不是字符串数组
解决方案三:
最直接的方法,还是按成员来赋值,这样无论如何都不会出错的。
不建议整个结构体来操作,特别是在使用两种语言的情况下。
解决方案四:
你知道C++的struct 的对齐是多少?
解决方案五:
如果要实现C/C++代码与C#之间的功能协作,会采用dll方式将C/C++代码封装成dll,然后在C#代码中调用dll:
///////////////////////////////////////////////////////////////////////////////////
[DllImport(""XORDll.dll""
EntryPoint = ""OutEncrypt""
CharSet = CharSet.Ansi
CallingConvention = CallingConvention.StdCall)
]
public static extern int OutEncrypt(string FilePath string SecretWord);
////////////////////////////////////////////////////////////////////////////////////////
详细方法参看我的博客文章:
http://blog.csdn.net/qq2399431200/article/details/9173045
至于你遇到的问题,可以采用上述方法,写一些适配函数,将C/C++格式的数据通过dll中的C/C++函数转换成C#支持的数据类型。这样就用到了设计模式的里面的Adapter模式。
/////////////////////////////////////////////////////////////////////////////
C/C++语言数据类型与C#数据类型对照表,参看如下:
http://www.cnblogs.com/mountain-mist/archive/2009/08/13/1545483.html
http://blog.csdn.net/lybwwp/article/details/8168888