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