Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#2

Re: DLL-Parameter: out VARIANT *

  Alt 25. Mai 2010, 19:50
function QuerySQL(out outResult: Variant; DBHandle: THandle; sql: PAnsiChar): Integer; stdcall; IN und OUT sind in C++ nur Hinweise auf die Datenrichtung und haben nix mit der Parameterbehandlungen VAR/CONST/OUT in Delphi gemeinsam.

PS: Um ein eventuelles Speicherleck zu vermeiden, (das OUT in C ruft gewisse Befürchtungen hervor, aufdaß ein eingehender Wert ignoriert/verworfen und nicht ordnungsgemäß freigegeben wird)
setzte outResult vor Aufruf der Funktion auf NULL, falls in V schon etwas enthalten sein kann.
Delphi-Quellcode:
uses Variants;

V := NULL;
i := QuerySQL(V, DBHandle, sql);
Wobei es nicht schaden kann, wenn du den Aufruf abkapselst ... z.B.:
Delphi-Quellcode:
function InternalQuerySQL(out outResult: Variant; DBHandle: Integer; sql: PAnsiChar): Integer; stdcall;
  external 'deineDll.dllname 'QuerySQL';

function QuerySQL(var outResult: Variant; DBHandle: THandle; sql: AnsiString): Integer;
begin
  outResult := NULL;
  Result := InternalQuerySQL(outResult, DBHandle, PAnsiChar(sql));
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat