怎么给在DLL库中动态建立的控件赋于一个事件的方法? ( 积分: 100 )

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

jrycl

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在一个DLL库中做一个侦听网络的功能,使用动态建立DELPHI的tserversocket控件方式.
程序如下:

//准备用来响应ONGETTHREAD事件的过程
procedure online1(Sender: TObject;ClientSocket: TServerClientWinSocket;var SocketThread: TServerClientThread);
begin
socketthread:=tts.Create(false,clientsocket);
clientsocket.SendText('welcome');
end;

.....
net:=tserversocket.Create(nil);
net.Port :=1234;
net.ServerType:=stThreadBlocking;
net.OnGetThread:= ??? <--这个地方要给该事件赋一个方法,可不知道该怎么赋于它一个过程名;
net.Active :=true;
....

在普通的窗体程序中,可以直接net.OnGetThread:=form1.online1;
可在DLL库中这样不行,各位高手可以告诉我怎么给DLL库中这样动态建立的事件赋一个过程吗?
 
我想在一个DLL库中做一个侦听网络的功能,使用动态建立DELPHI的tserversocket控件方式.
程序如下:

//准备用来响应ONGETTHREAD事件的过程
procedure online1(Sender: TObject;ClientSocket: TServerClientWinSocket;var SocketThread: TServerClientThread);
begin
socketthread:=tts.Create(false,clientsocket);
clientsocket.SendText('welcome');
end;

.....
net:=tserversocket.Create(nil);
net.Port :=1234;
net.ServerType:=stThreadBlocking;
net.OnGetThread:= ??? <--这个地方要给该事件赋一个方法,可不知道该怎么赋于它一个过程名;
net.Active :=true;
....

在普通的窗体程序中,可以直接net.OnGetThread:=form1.online1;
可在DLL库中这样不行,各位高手可以告诉我怎么给DLL库中这样动态建立的事件赋一个过程吗?
 
没写过。。。你先在dll里写个虚方法,然后在dll里提供该方法的接口

在你的程序里调用这个接口把你程序里的一个方法赋值给这个接口行不行?
 
用指针吧
 
指针?
楼上的能不能说详细一点呀?能有个简单的例子吗? 急呀。。。
 
我直接这样:
telnet.OnGetThread:=@online1; //想将这个过程的地址赋于这个事件!
老提示&quot;Incompatible types:'TGetThreadEvent' and 'Pointer' 这个错误!
意思可能是类型不匹配,我该怎么解决呢? 高手快来呀!
 
Delphi中的事件
1。事件是属性
2.事件是方法过程指针(方法必须属于一个类,严格的说事件是是两个指针,包括对象和
方法).
3.事件是可选的。
所以你的online1过程必须属于一个类,并且要实例化一个对象才可以。
 
谢谢楼上的,我对这些总有点模糊,下面是我写的,可能有错,但想知道你说的是不是这个意思.
type
TMYserver=class(tserversocket)
procedure online1(Sender: TObject; ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
end;
....
procedure TMYserver.online1(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread) ;
begin
socketthread:=tts.Create(false,clientsocket);
clientsocket.SendText('welcome');
end;
.....
net:=TMYserver.Create(nil);
net.Port :=1234;
net.ServerType:=stThreadBlocking;
net.OnGetThread:=TMYserver.online1; <---还是有问题呀,该怎么写呢?
 
net.OnGetThread:=TMYserver.online1;
改成
net.OnGetThread:=Self.online1;
 
问题解决了!谢谢了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
491
import
I
后退
顶部