Thema: PSafeArray

Einzelnen Beitrag anzeigen

swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
85 Beiträge
 
Delphi 10.4 Sydney
 
#1

PSafeArray

  Alt 17. Mär 2025, 16:26
Hallo,

ich muß eine COM-Schnittstelle mit folgender Signatur bedienen:

function DocSelectFiles(type_: SelectType; MenuIndex: Integer; out docIds: PSafeArray): HResult; stdcall;

Das Problem ist das PSafeArray.

Im C-Beispielcode wird gemacht:

CComSafeArray<BSTR> safeArr(1);
safeArr.SetAt(0, newDocId.AllocSysString(), false);
*docIds = safeArr.Detach();

In Delphi habe ich das wie folgt umgesetzt:

data := VarArrayCreate([0,0], varOleStr);
data[0] := 'Test';
docIds := PSafeArray(TVarData(data).VArray);

Wenn ich das aber so mache meldet die COM-Funktion "Falscher Parameter".

CComSafeArray scheint ein Helper in C zu sein, welcher das PSafeArray kapselt.

Gibt es sowas auch in Delphi?

Ich vermute mal, daß mein Problem die Zuweisung data[0]:='Test' ist. Ich denke, der Aufrufer will hier einen Null-Terminierten String.

"Die AllocSysString-Methode ordnet eine neue BSTR-Zeichenfolge zu, die mit Automation kompatibel ist. Anschließend wird der Inhalt der CHString-Zeichenfolge kopiert, einschließlich des abschließenden NULL-Zeichens ."

Hat jemand Vorschläge, wie der C-Code in Delphi umgesetzt werden sollte?

Grüße

Stefan
Stefan Westner
  Mit Zitat antworten Zitat