【求助】c++ typedef struct 转换成c#类型,急!在线等!!!

seamone 2012-12-11 08:03:52

#ifndef s_addr
#pragma once

//
// IPv4 Internet address
// This is an 'on-wire' format structure.
//
typedef struct in_addr
{
union
{
struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { USHORT s_w1,s_w2; } S_un_w;
ULONG S_addr;
} S_un;
#define s_addr S_un.S_addr /* can be used for most tcp & ip code */
#define s_host S_un.S_un_b.s_b2 // host on imp
#define s_net S_un.S_un_b.s_b1 // network
#define s_imp S_un.S_un_w.s_w2 // imp
#define s_impno S_un.S_un_b.s_b4 // imp #
#define s_lh S_un.S_un_b.s_b3 // logical host
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

#endif


以下是其调用方法,放在这里做参考,

unsigned long ip = MAKEIPADDRESS(192, 168, 0, 1);
unsigned short port = 1234;
in_addr ipAddress;
ipAddress.s_addr = htonl(ip);
TcpServer->OpenServer(ipAddress, port);


我在论坛里也看了一些别人解答,但是我这个仍然转不来,求大哥大姐们帮帮我。
...全文
295 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
seamone 2012-12-13
  • 打赏
  • 举报
回复
引用 12 楼 caozhy 的回复:
引用 11 楼 seamone 的回复:谢谢caozhy大哥,我还从没有用过[dllimport],先去搜索一下试试。 点函数名,右键,转到定义,就可以了。
caozhy大哥,如果方便的话请您给我您的邮箱地址好吗?麻烦您有空帮我看看,我没搞定。谢谢。
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
引用 11 楼 seamone 的回复:
谢谢caozhy大哥,我还从没有用过[dllimport],先去搜索一下试试。
点函数名,右键,转到定义,就可以了。
seamone 2012-12-11
  • 打赏
  • 举报
回复
谢谢caozhy大哥,我还从没有用过[dllimport],先去搜索一下试试。
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
引用 8 楼 seamone 的回复:
引用 6 楼 qldsrx 的回复:C#有TcpClient这个类,你何必要用C++的那个?其功能完全一样,而且更方便使用。 另外如果搞不定那个结构体,完全可以用C++/CLR进行中转。 谢谢回复,我是调用到第三方API,所以才这么郁闷。
dll不管你什么类型的。用uint就可以了。 你找下[dllimport]开头的函数声明,把那个也修改成uint就可以了。
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
引用 7 楼 seamone 的回复:
引用 5 楼 caozhy 的回复:bool TcpServer.OpenServer(uint ipAddress, ushort port); 即可。 这个是厂家的API,我只能用,没法修改的。 C# code?12错误 1 与“TcpServer.OpenServer(in_addr, ushort)”最匹配的重载方法具有一些无效参数错误 ……
api声明处也要改。
seamone 2012-12-11
  • 打赏
  • 举报
回复
引用 6 楼 qldsrx 的回复:
C#有TcpClient这个类,你何必要用C++的那个?其功能完全一样,而且更方便使用。 另外如果搞不定那个结构体,完全可以用C++/CLR进行中转。
谢谢回复,我是调用到第三方API,所以才这么郁闷。
seamone 2012-12-11
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
bool TcpServer.OpenServer(uint ipAddress, ushort port); 即可。
这个是厂家的API,我只能用,没法修改的。

错误	1	与“TcpServer.OpenServer(in_addr, ushort)”最匹配的重载方法具有一些无效参数
错误	2	参数 1: 无法从“uint”转换为“in_addr”	
qldsrx 2012-12-11
  • 打赏
  • 举报
回复
C#有TcpClient这个类,你何必要用C++的那个?其功能完全一样,而且更方便使用。 另外如果搞不定那个结构体,完全可以用C++/CLR进行中转。
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
bool TcpServer.OpenServer(uint ipAddress, ushort port); 即可。
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390308416
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
引用 2 楼 seamone 的回复:
引用 1 楼 caozhy 的回复:传uint就可以了。 uint ipAddressToInt(int a, int b, int c, int d) { return a * 256 * 256 * 256 + b * 65536 + c * 256 + d; } 谢谢回复。不好意思,一急没有说清楚,因为我在C#还要调用它的程序,所以这样不行。很头疼……
有什么不行的。 这就是一个union,无非就是把一个int拆成4个字节,允许你单独赋值/取值。 你根本不需要这样的联合体,只要一点位运算的知识就可以了。
seamone 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
传uint就可以了。 uint ipAddressToInt(int a, int b, int c, int d) { return a * 256 * 256 * 256 + b * 65536 + c * 256 + d; }
谢谢回复。不好意思,一急没有说清楚,因为我在C#还要调用它的程序,所以这样不行。很头疼。

bool TcpServer.OpenServer(in_addr ipAddress, ushort port);
threenewbee 2012-12-11
  • 打赏
  • 举报
回复
传uint就可以了。 uint ipAddressToInt(int a, int b, int c, int d) { return a * 256 * 256 * 256 + b * 65536 + c * 256 + d; }

110,534

社区成员

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

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

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