如何将socket传递进dll

山娃马小三儿 2017-04-16 02:58:28
开发环境delphi7,使用winsock2文件
一个主程序框架,用来接受客户端连接,客户端发起连接后,程序判断连接的合法性,如果合法就将这个连接传入一个dll,所有的收发工作都在这个dll里面进行,dll可以关闭这个socket。
最好有dll的简单代码,谢谢
...全文
292 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhz8000 2017-04-24
还有一点要注意,你dll里定义的 function test(hwnd :Pointer):boolean; 如果你主程序里是这样定义的 function(hwnd :Pointer):boolean;stdcall;也是不行的,要保持一致 感觉是一致的啊 ^_^ 好久没有回答问题了,看见楼主这样说我想说两句。 以前我们看见人家说调用DLL要加stdcall,我也是就加了,现在想起来 其实是别人回答只是让你知道要加,但是不知道为什么加的感觉。 其实加这个就是参数入栈的问题,因为每个编译器所编译的 代码入栈的顺序不一样,加了之后就是让大家保持一致,不至于取参数错误,或者访问栈错误。 你现在这个函数刚好一个参数, 所以基本是没有问题的,不管是从右到左还是从左到右入栈都没有问题,还有如果都是D调用不加也无所谓,但是供别的语言调用 最好还是加上,都按照这个入参约定调用,保证没有问题。
回复
蓝色光芒 2017-04-17
Socket就是一个整型,直接当作普通函数的参数传递到dll里就可以了
回复
还有一点要注意,你dll里定义的
function test(hwnd :Pointer):boolean;

如果你主程序里是这样定义的
function(hwnd :Pointer):boolean;stdcall;也是不行的,要保持一致


感觉是一致的啊
回复
就算没发送成功,但是也没关掉连接
回复
蓝色光芒 2017-04-17
还有一点要注意,你dll里定义的 function test(hwnd :Pointer):boolean; 如果你主程序里是这样定义的 function(hwnd :Pointer):boolean;stdcall;也是不行的,要保持一致
回复
蓝色光芒 2017-04-17
  winsock2.send(socket, sendData[0], 4, 0);   winsock2.closesocket(socket); 发送完马上就关闭,你让底层怎么响应呢, 你可以中间等一下再关   winsock2.send(socket, sendData[0], 4, 0); Sleep(10000); ///测试用   winsock2.closesocket(socket);
回复
这是dll简单代码 function test(hwnd :Pointer):boolean; var SendData :Array [0..3] of byte; socket :TSocket; begin socket :=TSocket(hwnd); SendData[0] :=1; SendData[1] :=2; SendData[2] :=3; SendData[3] :=4; winsock2.send(socket, sendData[0], 4, 0); winsock2.closesocket(socket); Result :=True; end; exports test; begin end. -------------------- 主程序里验证完socket的合法性后 test(Pointer(Socket));
回复
传是传进去了,也不报错,但是没法收发数据,也没法关闭这个socket 啊
回复
发动态
发帖子
Windows SDK/API
创建于2007-08-02

1145

社区成员

Delphi Windows SDK/API
申请成为版主
社区公告
暂无公告