一个制作OCX控件时遇到的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 binghe_yyh2001
  • 开始时间 开始时间
B

binghe_yyh2001

Unregistered / Unconfirmed
GUEST, unregistred user!
我想自己创建一个OCX控件,要求在里面集成一个indy的UDPSERVER,然后我想在OCX中自定义一个事件onReceive,该事件依托UDP的onDataRead事件,当有数据包到达的时候,自动将数据发送的onreceive中,例如如下:
procedure TVehicleMonitorX.UDPReadEvent(Sender: TObject
AData: TStream
ABinding: TIdSocketHandle);
begin
if FEvents <> nil then
begin
FEvents.OnRecieve(ParamList,ABinding.IP,ABinding.Port);
end
end;
不过有问题,请大虾们给予指导
我可以把我得源文件发给各位大虾,请给与知道:)
 
我想自己创建一个OCX控件,要求在里面集成一个indy的UDPSERVER,然后我想在OCX中自定义一个事件onReceive,该事件依托UDP的onDataRead事件,当有数据包到达的时候,自动将数据发送的onreceive中,例如如下:
procedure TVehicleMonitorX.UDPReadEvent(Sender: TObject
AData: TStream
ABinding: TIdSocketHandle);
begin
if FEvents <> nil then
begin
FEvents.OnRecieve(ParamList,ABinding.IP,ABinding.Port);
end
end;
不过有问题,请大虾们给予指导
我可以把我得源文件发给各位大虾,请给与知道:)
 
出现什么问题呢?
 
当使用该OCX控件的时候,好像并不能接受到信息,测试一下好像FEvents一直是空的,奇怪
 
楼主是不是发信息问这个问题啊

很遗憾 对这个领域不熟 帮不上忙
 
这个问题我遇到过,是同步的问题,dll中的线程同步有问题
你应该设置indy ThreadedEvent := True
然后加入单元:
{== D6DLLSynchronizer =================================================}
{: This unit handles the D6 synchronize problem in DLLs
@author Dr. Peter Below
@desc Version 1.0 created 3 November 2001<BR>
Current revision 1.0<BR>
Last modified 3 November 2001<P>
Usage: <BR>
Just add this unit to the DLL project, make sure you do not modify
the WakeMainThread global event yourself elsewhere. }
{======================================================================}
Unit D6DLLSynchronizer;

Interface

Implementation
Uses Windows, Messages, classes;

Type
TSyncHelper = Class
Private
wnd: HWND;
Procedure MsgProc( Var msg: TMessage );
Procedure Wakeup( sender: TObject );
Public
Constructor Create;
Destructor Destroy
override;
End;

Var
helper: TSyncHelper = nil;

{ TSyncHelper }

Constructor TSyncHelper.Create;
Begin
inherited;
wnd:= AllocateHWnd( msgproc );
WakeMainThread := Wakeup;
End;

Destructor TSyncHelper.Destroy;
Begin
WakeMainThread := nil;
DeallocateHWnd( wnd );
inherited;
End;

Procedure TSyncHelper.MsgProc(Var msg: TMessage);
Begin
If msg.Msg = WM_USER Then
CheckSynchronize
Else
msg.result := DefWindowProc( wnd, msg.msg, msg.WParam, msg.LParam );
End;

Procedure TSyncHelper.Wakeup(sender: TObject);
Begin
PostMessage( wnd, WM_USER, 0, 0 );
End;

Initialization
helper:= TSyncHelper.Create;
Finalization
helper.free;
End.
 
我也正在研究,可是我不知道。。。
帮你顶
 
我也在研究,可惜我还不懂。呵呵。顶吧。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部