dll中的网络控件 ( 积分: 100 )

  • 主题发起人 主题发起人 dv66isme
  • 开始时间 开始时间
D

dv66isme

Unregistered / Unconfirmed
GUEST, unregistred user!
各位同仁:

我在一个dll文件中使用nmudp tclientsocket等网络控件(放在一个datamodules中)
将该dll文件远程注入到别的程序进程中,却无法收到网络数据消息,(onsocketdatareceive 事件不会触发)好像在dll中无法使用独立的网络控件,大家有甚末
好办法讨论一下 email:tdavid@sohu.com qq:154263127
 
各位同仁:

我在一个dll文件中使用nmudp tclientsocket等网络控件(放在一个datamodules中)
将该dll文件远程注入到别的程序进程中,却无法收到网络数据消息,(onsocketdatareceive 事件不会触发)好像在dll中无法使用独立的网络控件,大家有甚末
好办法讨论一下 email:tdavid@sohu.com qq:154263127
 
我在Dll中用Indy没问题
 
这只是一个如何在dll使用网络控件的问题,难道问题太简单?
注意:我要的是在dll中能独立使用udp,clientsocket等,能触发网络事件。
 
没在dll中试过 NMUDP
建议你用D7的Indy
http://www.projectindy.org/DemoDownloads/Indy9Demos_26Oct04.zip
 
xianguo,可以向你请教吗?我的qq:154263127
 
xianguo:我并不一定要使用nmudp,我就是不知道如何在dll中使用网络控件,望指教
 
你可以试试在dll中创建一 TDataModule,并将TNMUDP放在 DataModule上,其它的与exe应用一样
 
我是这样做的,但网络控件不工作。xianguo先生,你可以提供一个例子给我吗?
 
这是我用 IdTCP 做的一个下载(系统自动升级用)的例子(客户端)

Function FDownFile
(
AiFollow : pChar; //断点续传标志(T是/F否)
AiHost : pChar; //文件服务器主机IP
AiPort : Integer; //端口号
AiFileName : pChar; //传入文件名
AiSavePath : PChar; //下载后的文件存放路径
AoFileName : pChar; //传出文件名
AoMsg : pChar //提示信息
) : Integer; StdCall;
Var
sHost, sRemoteFile, sLocalFile, sSavePath : String;
IdAntiFreezeDown : TIdAntiFreeze;
IdTCPCDown : TIdTCPClient;
fStream : TFileStream;
Begin
Result := 1;
StrPCopy(AoMsg, '文件下载失败');
Try
sHost := StrPas(AiHost);
sRemoteFile := Trim(StrPas(AiFileName));
{
If StrRScan(AiSavePath, '/')<>'/' Then sSavePath := StrPas(AiSavePath) + '/'
Else sSavePath := StrPas(AiSavePath);
}
sSavePath := Trim(StrPas(AiSavePath)) + '/';
sSavePath := StringReplace(sSavePath, '//', '/', [rfReplaceAll]);
If Not DirectoryExists(sSavePath) Then ForceDirectories(sSavePath);
sLocalFile := sSavePath + ExtractFileName(sRemoteFile);
StrPCopy(AoFileName, sLocalFile);
If AiFollow<>'T' Then //'T'断点续传
If FileExists(sLocalFile) Then DeleteFile(sLocalFile);
Except
Exit;
End;
//
IdAntiFreezeDown := TIdAntiFreeze.Create(Nil);
IdTCPCDown := TIdTCPClient.Create(Nil);
Try
With IdTCPCDown Do
Begin
Disconnect;
Host := sHost;
Port := AiPort;
Connect;
WriteLn(_DownCommand + sRemoteFile);
End;
//
Try
fStream := TFileStream.Create(sLocalFile, fmCreate);
While IdTCPCDown.Connected Do
Begin
IdTCPCDown.ReadStream(fStream, -1, True);
End;
Except
On E:Exception Do
Begin
StrPCopy(AoMsg, '文件创建失败:' + E.Message);
Exit;
End;
End;
//
StrPCopy(AoMsg, '文件下载成功');
Result := 0;
Finally
If Assigned(fStream) Then FreeAndNil(fStream);
IdTCPCDown.Disconnect;
If Assigned(IdTCPCDown) Then FreeAndNil(IdTCPCDown);
FreeAndNil(IdAntiFreezeDown);
End;
End;
 
我要的是在一个dll中的socket控件用法。xianguo,你可以加我的qq吗?
 
将你的程序mail给我看看 xianguochen@21cn.com
 
xianguo:我已发了,请查收
 
xianguo大侠..能否把你的代码贴出来啊..

有N多的人想在DLL插入中应用VCL控件呢
 
十有八九是网络控件的线程模式设的不对,改一下试试吧。
 
谁有代码 共想一下嘛 我用IdTCPClient就能连上一下 然后就没了 郁闷
 
DLL.gif
 
帮顶

--------签名档---------------------------

惊爆开源站

http://www.source520.com

80G源码电子书免费免注册下载,大量精辟技术文档库随时更新
 
后退
顶部