我有一个需要使用 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 过程?