Einzelnen Beitrag anzeigen

ekke

Registriert seit: 14. Nov 2009
18 Beiträge
 
#1

Problem String (PAnsiChar) Parameter in Com Server Anwendung

  Alt 14. Nov 2009, 13:17
Hallo,
ich habe ein Problem mit der Rückgabe eines Strings über eine Com-Schnittstelle.
Der Com-Server ist ein Out-Of-Process Server (also eine eigene Anwendung). Die Client instantiert den Server und verdendet die Funktionen der Schnittstelle. Funktioniert alles prima - bis auf...

Ich habe eine Methode im Type Library Editor deklariert, die als einen IN Parameter einen String (LPSTR, übersetzt in PChar) übergibt. Einen weiteren Parameter als OUT der einen String (*LPSTR, übersetzt var PChar) zurück geben soll.
Also in etwa Methode
function MyComServer.GetVorname(Nachname : PChar; var Vorname : PChar) : HRESULT;safecall;
begin
Vorname := PChar(AObjectGlobalStr);
Result := S_OK;
end;

AObjectGlobalStr ist ein normaler String der in der private section der Klasse deklariert ist und einen geeigneten Wert enthält.

Wenn ich die Funktion aufrufe wird alles ausgeführt, es kommt aber *nach* dem Verlassen der Funktion offensichtlich zu einer exception, da der Debugger das CPU/Disassembler Fenster öffnet. Der Client bekommt das richtige Ergebnis zu sehen, bemerkt also von der Exception nichts.

Während der Laufzeit (ohne Debugger) sieht alles ganz normal aus, außer das mit jedem Aufruf etwas Speicher verwendet wird der nicht wieder freigegeben wird, d.h. nach einer Nacht intensiven Rennens sind einige hundert MB verbraucht.

Ich habe die Variante mit PChar verwenden wollen um das gehample mit den SafeArrays zu umgehen, oder darf man das so einfach nicht machen?

Gruß Ekkehard
  Mit Zitat antworten Zitat