主题:回调函数的问题,请大家帮帮 忙
是我主程序中的代码,其中Set_GetXML是我自己编写的DLL方法,用来设置回调函数
procedure TMainForm.FormCreate(Sender: TObject);
begin
Set_GetXML(@GetXMLPackage);
end;
procedure GetXML(PeerIP,PeerPort,sData :string); stdcall;
begin
MainForm.Analyse_XML(PeerIP,PeerPort,sData );
end;
procedure TMainForm.Analyse_XML(PeerIP, PeerPort, sData: string);
var
xmlDoc:IXMLDocument;
ParentNode:IXMLNode;
begin
xmlDoc:=NewXMLDocument;
xmlDoc.XML.Text:=sData;
xmlDoc.Active:=true;
ParentNode:=xmlDoc.ChildNodes[1];
if (ParentNode.NodeName='Message')then
begin
if ParentNode.Attributes['Type']='Login' then
UserLogin(PeerIP,PeerPort,ParentNode);
end;
end;
在我DLL中如果接受到一个XML包就回调主程序中的GetXML方法,GetXML又调用主窗口的Analyse_XML方法来分析XML包,进行相应处理,可是我调试的时候发现每次执行到
procedure TMainForm.Analyse_XML(PeerIP, PeerPort, sData: string);
var
xmlDoc:IXMLDocument;
ParentNode:IXMLNode;
begin
xmlDoc:=NewXMLDocument;//执行到这里后,程序什么也没做了,主程序也没有死锁
我不知道是为什么,回调函数能否调用窗口中的方法啊?我这个程序是错在哪里?
procedure TMainForm.FormCreate(Sender: TObject);
begin
Set_GetXML(@GetXMLPackage);
end;
procedure GetXML(PeerIP,PeerPort,sData :string); stdcall;
begin
MainForm.Analyse_XML(PeerIP,PeerPort,sData );
end;
procedure TMainForm.Analyse_XML(PeerIP, PeerPort, sData: string);
var
xmlDoc:IXMLDocument;
ParentNode:IXMLNode;
begin
xmlDoc:=NewXMLDocument;
xmlDoc.XML.Text:=sData;
xmlDoc.Active:=true;
ParentNode:=xmlDoc.ChildNodes[1];
if (ParentNode.NodeName='Message')then
begin
if ParentNode.Attributes['Type']='Login' then
UserLogin(PeerIP,PeerPort,ParentNode);
end;
end;
在我DLL中如果接受到一个XML包就回调主程序中的GetXML方法,GetXML又调用主窗口的Analyse_XML方法来分析XML包,进行相应处理,可是我调试的时候发现每次执行到
procedure TMainForm.Analyse_XML(PeerIP, PeerPort, sData: string);
var
xmlDoc:IXMLDocument;
ParentNode:IXMLNode;
begin
xmlDoc:=NewXMLDocument;//执行到这里后,程序什么也没做了,主程序也没有死锁
我不知道是为什么,回调函数能否调用窗口中的方法啊?我这个程序是错在哪里?