4
我有我需要使用COM,其聲明如下在C#中調用過程:如何轉換數據類型以調用COM過程?
void DoSomething (string param1, string[] param2, Object[] param3)
在進口的TypeLibrary德爾福聲明:
procedure DoSomething (param1: System.Widestring,
param2: ActiveX.PSafeArray,
param3: ActiveX.PSafeArray);
參數1只是一個字符串。
param2是一個參數名稱數組,我們假設:['arg1','arg2']。
param3是這些參數的根據值。
實施例:ARG1:雙= 1.23,ARG2:整數= 10。
這將導致:
- 參數2:[ 'ARG1', 'ARG2']
- 參數3:[1.23,10]
到目前爲止,我有這樣的代碼參數2 []轉換成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;
現在,我應該有一個參數2的PSafeArray。
但是我怎樣才能做到這一點param3 []?
會有不同的數據類型,不僅是字符串。
因爲在param2和param3設置之前我不能調用COM過程,所以我也不能確定上面的代碼是否正在做我所需要的。
它運行,但我是否正確地做這些轉換將結果傳遞給上述COM過程?
謝謝的作品! – Holgerwa