delphi – 如何转换数据类型以调用COM过程?

delphi – 如何转换数据类型以调用COM过程?,第1张

概述我有一个需要使用COM调用的过程,在C#中声明如下: void DoSomething (string param1, string[] param2, Object[] param3) 导入的TypeLibrary中的Delphi声明是: procedure DoSomething (param1: System.Widestring, param 我有一个需要使用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过程?

解决方法 默认情况下,.NET对象被封送为COM VARIANT,除非使用MarshalAs语法在C#代码中明确指定为IUnkNown或Idispatch.

试试这个:

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过程?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1267478.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存