组件的事件问题
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure ClientRead (Sender: TObject; Socket: TCustomWinSocket);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
ServerSocket1: TServerSocket;
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.OnClientRead := ClientRead;
end;
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
end;
end.
上面的代码是可行的,而且没有错误的
\\-------------------------------------
下面的代码是不可行的,而且有错误,但我不清楚为什么会出错
library ClientDll;
uses
SysUtils,
Classes,
ScktComp,
Command in 'Command.pas ';
{$R *.res}
var
ServerSocket1: TServerSocket;
procedure ClientRead (Sender: TObject; Socket: TCustomWinSocket);
var
S: string;
begin
S := Socket.ReceiveText;
end;
procedure StartTcpServer;
begin
ServerSocket1 := TServerSocket.Create(nil);
with ServerSocket1 do
begin
Port := 503;
ServerType := stThreadBlocking;
OnClientRead := ClientRead;
Active := True;
end;
end;
procedure CloseTcpServer;
begin
with ServerSocket1 do
begin
Active := False;
Free;
end;
end;
begin
end.
\\--------------------------
上面的二段代码同样是OnClientRead := ClientRead;但下面的一个就有问题,是错误的。我不知道是那里出了问题,是不是DLL里面不能这样写。
[解决办法]
非成员函数也用过,这样转一下吧,新建一个Unit
unit Unit1;
interface
uses
ScktComp;
type
TProcess=class
public
class procedure ClientRead (Sender: TObject; Socket: TCustomWinSocket);
end;
implementation
{ TProcess }
class procedure TProcess.ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
S: string;
begin
S := Socket.ReceiveText;
end;
end.
然后到Dll library中改
OnClientRead := TProcess.ClientRead; //TProcess不用创建,ClientRead只是一个类方法