COM を使用して呼び出す必要があるプロシージャがあり、C# では次のように宣言されています。
void DoSomething (string param1, string[] param2, Object[] param3)
インポートされた TypeLibrary の Delphi 宣言は次のとおりです。
procedure DoSomething (param1: System.Widestring,
param2: ActiveX.PSafeArray,
param3: ActiveX.PSafeArray);
param1 は単なる文字列です。
param2 は引数名の配列です。たとえば、['arg1', 'arg2'] とします。
param3 は、これらの引数に対応する値です。
例: arg1: Double = 1.23、arg2: integer = 10。
これにより、次のようになります。
- param2: ['arg1', 'arg2']
- param3: [1.23, 10]
これまでのところ、param2[] を PSafeArray に変換する次のコードがあります。
var param2: array of string;
i: integer;
va_param2: Variant;
psa_param2: Activex.PSafeArray;
begin
SetLength (param2, 2);
param2 [0] := 'arg1';
param2 [1] := 'arg2';
// Create VariantArray, copy data
va_param2 := VarArrayCreate ([0, Length(param2)-1], varOleStr);
for i := 0 to Length(param2)-1 do
va_param2 [i] := param2 [i];
// Convert VariantArray to PSafeArray
psa_param2 := PSafeArray (TVarData (va_param2).VArray);
end;
これで、param2 の PSafeArray が必要になります。
しかし、 param3[] に対してこれを行うにはどうすればよいですか?
文字列だけでなく、さまざまなデータ型があります。
param2 と param3 が設定される前に COM プロシージャを呼び出すことができないため、上記のコードが必要なことを実行しているかどうかもわかりません。
実行されますが、結果を上記の COM プロシージャに渡すためにこれらの変換を正しく行っていますか?