Hol*_*rwa 4 delphi com delphi-xe2
我有一个需要使用COM调用的过程,在C#中声明如下:
void DoSomething (string param1, string[] param2, Object[] param3)
Run Code Online (Sandbox Code Playgroud)
导入的TypeLibrary中的Delphi声明是:
procedure DoSomething (param1: System.Widestring,
param2: ActiveX.PSafeArray,
param3: ActiveX.PSafeArray);
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
现在我应该为param2安装PSafeArray.
但是我如何为param3 []做到这一点?
将有不同的数据类型,而不仅仅是字符串.
由于我无法在param2和param3设置之前调用COM过程,因此我也无法确定上面的代码是否正在执行我需要的操作.
它运行,但我是否正确地将这些转换传递给上面的COM过程?
默认情况下,.NET Object被封送为COM VARIANT,除非使用语法明确指定为C#IUnknown或IDispatchC#代码MarshalAs.
试试这个:
var
param2: array of string;
param3: array of Variant;
i: integer;
va_param2: Variant;
va_param3: Variant;
psa_param2: Activex.PSafeArray;
psa_param3: Activex.PSafeArray;
begin
SetLength (param2, 2);
param2 [0] := 'arg1';
param2 [1] := 'arg2';
SetLength (param3, 2);
param3[0] := 1.23;
param3[1] := 10;
// Create arrays, copy data
va_param2 := VarArrayCreate ([Low(param2), High(param2)], varOleStr);
for i := Low(param2) to High(param2) do
va_param2 [i] := param2 [i];
va_param3 := VarArrayCreate ([Low(param3), High(param3)], varVariant);
for i := Low(param3) to High(param3) do
va_param3 [i] := param3 [i];
// Convert arrays to PSafeArray
psa_param2 := PSafeArray (TVarData (va_param2).VArray);
psa_param3 := PSafeArray (TVarData (va_param3).VArray);
...
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2679 次 |
| 最近记录: |