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 的两个结构体,

![图片说明](https://img-ask.csdn.net/upload/201504/02/1427951599_549086.png)图片说明

图片说明
在世界调用的时候 包参数错误,具体是

它 在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