读书人

组件的事件有关问题

发布时间: 2012-02-28 13:06:35 作者: rapoo

组件的事件问题
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只是一个类方法

读书人网 >.NET

热点推荐