使用ICS控件包的TWSocket问题,该如何动态创建对象?(100分)

  • 主题发起人 主题发起人 jimmyl
  • 开始时间 开始时间
J

jimmyl

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把TWSocket封装在一个dll最为客户端和服务器通信,下面是
我写的部分测试代码。遇到的问题:
在其他程序调用Initialize要创建一个TWSocket对象时,报告访问地址冲突出错。
改成在Initialization段声明存在同样问题,请问TWSocket该如何动态创建,
需要做那些前提准备?
library TcpCom;
uses
SysUtils,
Classes,
UnClMain in 'UnClMain.pas';

exports
Test name 'Test',
Initialize name 'Initialize';
{$R *.res}


begin
end.

unit UnClMain;

interface
uses Forms, Dialogs, WSocket;

procedure Test(AParentHandle: THandle; AStr: PChar); stdcall;
procedure Initialize; stdcall;
var
CliSocket: TWSocket;
implementation

procedure Test(AParentHandle: THandle; AStr: PChar);
begin
Application.Handle := AParentHandle;
ShowMessage(AStr);
end;

procedure Initialize;
begin
CliSocket.Create(nil);
end;

initialization
finalization
if cliSocket <> nil then
begin
if CliSocket.State <> wsClosed then
CliSocket.Close;
CliSocket.Free;
end;
end.
 
你应该用一个方法创建Winsocket,并传入程序的TApplication对象;
var
CliSocket: TWSocket
;;;;;
CliSocket:=TWsocket.Create(Application.MainForm);
创建时必须指定OWNER;
给分吧!
 
犯大错误了,见笑,好久没写代码了。
procedure Initialize;
begin
CliSocket.Create(nil);
end;

改成CliSocket := TWSocket(nil)就可以用了,是不是一定要传入一个
Application.MainForm?
 
理论上是的啊?
 
socket可以不依附于其他容器而动态创建的吧,它只是个通讯通道,
没有必要一定要指定一个Owner Component。
 
我试了一下,同意!
 
后退
顶部