Hallo,
ich habe mir eure Funktion oben mal zu nutze gemacht um ein Bild zu übertragen. Klappt auch im Großen und Ganzen wunderbar.
Nur habe ich an einer Stelle einen Fehler, den ich mir nicht erklären kann. Hier erst mal mein Code im Client:
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
var
aClient: TServerMethods1Client;
aFileStream: TFileStream;
i: Integer;
begin
aClient := TServerMethods1Client.Create(SQLCOnnection1.DBXConnection);
Try
aFileStream := TFileStream.Create(JvFilenameEdit1.Text, fmOpenRead);
try
aClient.UploadFile(aFileStream, 'Upload', ExtractFileName(JvFilenameEdit1.Text));
except
ShowMessage('Übertragung fehlerhaft!');
end;
Finally
aFileStream.Free;
aClient.Free;
End;
end;
(Jetzt bitte mal nicht auf die Try...expept-Blöcke achten
)
Wenn ich jetzt was übertragen will, dann tritt beim aClient.Free eine
Exception auf:
"Im Projekt DSClient.exe ist eine
Exception der Klasse $C0000008 mit der Meldung 'system
exception (code 0xc0000008) at
0x77b712f7' aufgetreten."
Ich war eigentlich immer der Meinung, dass man selbst erzeugte Objekte auch selber wieder freigeben sollte. Aber möglicherweise
besteht ja noch ein Zugriff auf dieses Objekt. Ich weiß aber nich wo.
Wenn ich das aClient.Free weglasse, dann habe ich bei XP beim verlassen des Programms eine
Exception:
"
Exception EAccessViolation in Modul DSClient.exe bei 00005D08.
Zugriffsverletzung bei Adresse 00405D08 in Modul 'DSClient.exe'. Lesen von Adresse 0000000C."
Ich habe noch eine zweite Funktion, die ich aus einen Tutorial übernommen habe:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
aClient: TServerMethods1Client;
begin
aClient := TServerMethods1Client.Create(SQLCOnnection1.DBXConnection);
Try
Edit1.Text := aClient.ReverseString(Edit1.Text);
Finally
aClient.Free;
End;
end;
Die läuft aber ohne
Exception, und hier gehe ich aClient ja auch frei.
Hat jemand eine Idee, was ich falsch gemacht habe?