
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过程?
试试这个:
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;总结
以上是内存溢出为你收集整理的delphi – 如何转换数据类型以调用COM过程?全部内容,希望文章能够帮你解决delphi – 如何转换数据类型以调用COM过程?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)