Aşağıda bir thread içerisinde yaptığım işlerin basit bir kalıbını çıkartmaya çalıştım
Bu kalıp içersinde bulunan
"procedure TDPServis.DoNodeLoaded(Sender: TObject; Node: TXmlNode);"
procedure "delphi 2007" ile program derlendiğinde hiç sorun olmadan çalışıyor
Fakat aynı kodu "Delphi XE7" ile derlediğimde ise hiç bu rutine uğramadan işlem sonlanıyor
Bunun nedeni ne olabilir acaba tanımlamlarda yada sınıf farklılıklarımı mevcut 2 delphi arasında
Konu biraz önemli ve acil durumda yardımcı olabilecek arkadaşlara şimdiden teşekkür derim
iyi çalışmalar
Kod: Tümünü seç
unit untDPServis;
interface
uses Windows, Classes, Controls, Forms, ComCtrls, ActiveX, Graphics, Dialogs, dxmdaset,
SysUtils, SOAPHTTPClient, StdCtrls, Variants, XMLIntf, XMLDoc, XSBuiltIns,
Messages, NativeXml, AdoDb, Rio, SOAPHTTPTrans, Wininet, sStatusBar,
MSXML;
Type
TDPServis = class(TThread)
private
iIslem : Integer;
HTTPRIO: THTTPRIO;
ANativeXml: TNativeXml;
procedure SynExec;
public
bThreadFinish: Boolean;
bError: Boolean;
constructor Create(_iIslem: Byte); overload;
procedure prc_OnThreadTerminate(_Sender: TObject);
procedure prc_HataOlustu();
procedure DoNodeLoaded(Sender: TObject; Node: TXmlNode);
procedure HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
procedure HTTPWebNodeBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
procedure prc_FaturaListesi();
protected
procedure Execute; override;
End;
var
DPServis: TDPServis;
implementation
constructor TDPServis.Create(_iIslem: Byte);
begin
inherited Create(False);
bThreadFinish := False;
iIslem := _iIslem;
//.......
//.......
//.......
//.......
//.......
OnTerminate := prc_OnThreadTerminate;
FreeOnTerminate := True;
end;
constructor TDPServis.Create(_iIslem: Byte);
begin
inherited Create(False);
bThreadFinish := False;
iIslem := _iIslem;
//.......
//.......
//.......
//.......
//.......
//.......
OnTerminate := prc_OnThreadTerminate;
FreeOnTerminate := True;
end;
procedure TDPServis.prc_OnThreadTerminate(_Sender: TObject);
begin
bThreadFinish := True;
Application.ProcessMessages;
end;
procedure TDPServis.prc_HataOlustu();
begin
ShowMessage('..............');
end;
procedure TDPServis.DoNodeLoaded(Sender: TObject; Node: TXmlNode);
var
FileStream: TextFile;
XMLDoc: IXMLDomDocument;
NodeMain : IXMLDomNode;
XMLText : IXMLDOMText;
I:Integer;
procedure prc_NodeToNameAndText(pNode:IXMLDomNode);
var
X : Integer;
Node : IXMLDomNode;
begin
Node := pNode;
while Node <> nil do
begin
if Node.childNodes.length > 1 then
for X := 0 to Node.childNodes.length - 1 do
prc_NodeToNameAndText(Node.childNodes.item[X]);
if not( (Node.nodeName = '') and (Node.nodeName = 'Null') ) then
begin
Writeln(FileStream, Node.nodeName + '=(' + Trim(Node.text) +')');
end
else
Writeln(FileStream,'---------');
Node := Node.nextSibling;
end;
Writeln(FileStream,' ');
end;
begin
if not FileExists(ExtractFileDir(Application.ExeName) +'\'+'Dosya.txt') then
FileClose(FileCreate(ExtractFileDir(Application.ExeName) +'\'+'Dosya.txt',fmShareDenyNone));
AssignFile(FileStream,ExtractFileDir(Application.ExeName) +'\'+'Dosya.txt');
try
FileMode := fmShareDenyNone;
Append(FileStream);
prc_NodeToNameAndText(Node);
finally
CloseFile(FileStream);
end;
end;
procedure TDPServis.HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
Begin
SOAPResponse.Position := 0;
case iIslem of
1: ANativeXml.LoadFromStream(SOAPResponse);
end;
End;
procedure TDPServis.HTTPWebNodeBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
TimeOut: Integer;
begin
TimeOut := 180000;
InternetSetOption(Data, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@TimeOut), SizeOf(TimeOut));
InternetSetOption(Data, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@TimeOut), SizeOf(5000));
InternetSetOption(Data, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@TimeOut), SizeOf(TimeOut));
end;
procedure TDPServis.prc_FaturaListesi();
begin
try
//.....
//.....
//.....
except
on e: exception do
begin
bError := True;
Synchronize(prc_HataOlustu);
end;
end;
end;
procedure TDPServis.SynExec;
begin
CoInitializeEx(nil, COINIT_MULTITHREADED);
try
HTTPRIO := THTTPRIO.Create(nil);
HTTPRIO.OnAfterExecute := HTTPRIOAfterExecute;
HTTPRIO.HTTPWebNode.OnBeforePost := HTTPWebNodeBeforePost;
ANativeXml := TNativeXml.Create(nil);
ANativeXml.OnNodeLoaded := DoNodeLoaded;
case iIslem of
1: prc_FaturaListesi();
end;
finally
CoUninitialize;
end;
end;
procedure TDPServis.Execute;
begin
Synchronize(SynExec);
end;
end.