高难度,高手请进...(100分)

  • 主题发起人 emailqjc
  • 开始时间
E

emailqjc

Unregistered / Unconfirmed
GUEST, unregistred user!
我们平时在开发分布式程序的时候都用TClientSocket,TServerSocket,为了技术保密,我想把我的一些重要的东西封装在dll中,封装好了,我在调用的时候能连接到服务端,怎么就不能发送出去数据呢(服务端和客户端都在同一台机器,服务端的端口:20000),代码如下:
//DLL代码:
library ProComIntfac;
uses
ShareMem,
SysUtils,
Classes,
Windows,
IdGlobal,
Registry,ScktComp;
var
CSocket:TClientSocket;
{$R *.res}
Function SendCMD(AHost:String;APort:Word;AStr:String):Word;Stdcall;
Begin
Result:=1;
CSocket:=TClientSocket.Create(nil);
CSocket.ClientType:=ctNonBlocking;
CSocket.Host:=AHost;
CSocket.Port:=APort;
try
CSocket.Active:=False;
CSocket.Active:=True;
CSocket.Socket.SendText(AStr);
except
Result:=0;
end;
End;
exports {ConnServer name 'ConnServer',}
SendCMD name 'SendCMD' ;
begin
end.
//服务端设置:
Host:127.0.0.1
Port:20000
//调用代码:
SendCMD('127.0.0.1,20000,'你好')
 
不用要string 用pchar
 
楼上朋友,是这个问题吗?
 
是不是你测试就知道了。
 
代码看不出有什么问题,不过有个问题需要注意。就是如果在DLL中使用string类型,你需要在你调用这个DLL的主工程文件的uses部分的第一加引用ShareMem。
 
使用DLL的时候接口定义一般不要用String,改为PChar
还是就是网络程序,需要WSAStartup初始化的
你验证一下
 
怎么Active=true之后马上send了?
有没连上都还未知呢!
建议楼主看一下TClientSocket的文档哟。
即使在dll内,也可以用事件的哟
 
谢谢各位,分不多请接受,请问wpy020327:
1、 怎么判断连接是否成功呢
2、在dll内如何用事件呢?
 
TClientSocket,TServerSocket 是依赖于windows消息的,我猜测是你封装在dll里的TClientSocket,TServerSocket没有收到消息
 
顶部