托管类对象不能转换为本机引用 求助!!

oubenruing 2013-08-28 04:28:49
我使用clr窗体应用程序创建了一个form
在构造函数中使用socket连接到服务器
出现如下错误
1>c:\users\cr\documents\visual studio 2012\projects\client\client\Form1.h(84): error C2664: “Form1::Connect”: 不能将参数 1 从“SOCKET”转换为“SOCKET &”
1> gc 堆(托管类成员)中的对象不能转换为本机引用

相关代码如下

Form1()
{
InitializeComponent();
this->richTextBox1->Text =L"正在连接服务器...";
WSADATA wsa;
//初始化套接字DLL
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
this->richTextBox1->Text = richTextBox1->Text+"\n初始化套接字失败";

}

//创建套接字
if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
this->richTextBox1->Text =richTextBox1->Text+"\n创建套接字失败";
}
int test_number_a;
test_number_a=Connect(sock);//链接服务器 此处connect报错
if(test_number_a==-1) this->richTextBox1->Text = richTextBox1->Text+"\n连接服务器失败";
else this->richTextBox1->Text = richTextBox1->Text+"\n连接服务器成功,请在右边文本框输入车票密码进行查询";
//
//TODO: 在此处添加构造函数代码
//
}
...全文
324 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2013-08-28
  • 打赏
  • 举报
回复
引用 10 楼 oubenruing 的回复:
[quote=引用 9 楼 hdt 的回复:] 既然用clr就用system.net.socket吧,不要用winsocket
谢谢斑竹 刚接触.net 还不知道 我已经解决了 构造函数内部新建一个SOCKET 让连接服务器的函数改成带有返回值的
SOCKET server(SOCKET sock)

SOCKET s;
sock=server(s);
233 我好聪明[/quote] 只是一个socket还好办,因为在winsocket中socket就是int,一个值类型而已,后面的有你受的
oubenruing 2013-08-28
  • 打赏
  • 举报
回复
引用 9 楼 hdt 的回复:
既然用clr就用system.net.socket吧,不要用winsocket
谢谢斑竹 刚接触.net 还不知道 我已经解决了 构造函数内部新建一个SOCKET 让连接服务器的函数改成带有返回值的
SOCKET server(SOCKET sock)

SOCKET s;
sock=server(s);
233 我好聪明
真相重于对错 2013-08-28
  • 打赏
  • 举报
回复
既然用clr就用system.net.socket吧,不要用winsocket
oubenruing 2013-08-28
  • 打赏
  • 举报
回复
引用 7 楼 max_min_ 的回复:
[quote=引用 6 楼 oubenruing 的回复:] [quote=引用 3 楼 modyaj 的回复:] 不能将参数 1 从“SOCKET”转换为“SOCKET &”----错误指明 需要传递引用 而不是传值
应该怎么修改呢[/quote] 其实最好的改接口好了,但是工作量多 直接这样吧

//这样吧
SOCKET &consock = sock;
test_number_a=Connect( consock);
[/quote] 然后还是出现了这样的问题 c:\users\cr\documents\visual studio 2012\projects\client\client\Form1.h(84): error C2440: “初始化”: 无法从“SOCKET”转换为“SOCKET &” 1> gc 堆(托管类成员)中的对象不能转换为本机引用 不是程序的问题 我把有关socket的代码都放到构造函数中就可以编译运行 现在是本机方法如何引用托管类的对象
max_min_ 2013-08-28
  • 打赏
  • 举报
回复
引用 6 楼 oubenruing 的回复:
[quote=引用 3 楼 modyaj 的回复:] 不能将参数 1 从“SOCKET”转换为“SOCKET &”----错误指明 需要传递引用 而不是传值
应该怎么修改呢[/quote] 其实最好的改接口好了,但是工作量多 直接这样吧

//这样吧
SOCKET &consock = sock;
test_number_a=Connect( consock);
oubenruing 2013-08-28
  • 打赏
  • 举报
回复
引用 3 楼 modyaj 的回复:
不能将参数 1 从“SOCKET”转换为“SOCKET &”----错误指明 需要传递引用 而不是传值
应该怎么修改呢
oubenruing 2013-08-28
  • 打赏
  • 举报
回复
引用 2 楼 max_min_ 的回复:

Form1::Connect”: 不能将参数 1 从“SOCKET”转换为“SOCKET &”
// 错误很明显吧! 你Connect函数定义的参数 需要的是引用,

test_number_a=Connect(sock);// 传的参数和定义参数类型不匹配吧

应该怎么修改呢
oubenruing 2013-08-28
  • 打赏
  • 举报
回复

Form1::Connect”: 不能将参数 1 从“SOCKET”转换为“SOCKET &”
// 错误很明显吧! 你Connect函数定义的参数 需要的是引用,

test_number_a=Connect(sock);// 传的参数和定义参数类型不匹配吧

引用不是传入参数以后自己会寻找到参数地址进行修改么
按照你说的情况该怎么修改呢
modyaj 2013-08-28
  • 打赏
  • 举报
回复
不能将参数 1 从“SOCKET”转换为“SOCKET &”----错误指明 需要传递引用 而不是传值
max_min_ 2013-08-28
  • 打赏
  • 举报
回复

Form1::Connect”: 不能将参数 1 从“SOCKET”转换为“SOCKET &”
// 错误很明显吧! 你Connect函数定义的参数 需要的是引用,

test_number_a=Connect(sock);// 传的参数和定义参数类型不匹配吧

oubenruing 2013-08-28
  • 打赏
  • 举报
回复
SOCKET sock;
这个我放在私有成员变量里面
因为之后还有控件会要调用该socket

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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