deiphi调用com的问题(100分)

  • 主题发起人 主题发起人 smiling0206
  • 开始时间 开始时间
S

smiling0206

Unregistered / Unconfirmed
GUEST, unregistred user!
com中有这样一个方法:void GetForecastResult([out] double* result);作为输出

比如在delphi中声明了一个此com的对象为comtest。那么该如何调用以上方法?
 
怎么没人回答啊?[:(]
我是不是表述得不清楚。再补充几句
com中有这样一个方法:void GetForecastResult([out] double* result),result是一个指向输出数组的指针。
当在delphi中通过import type library加载此com后,自动生成了一个*_TLB单元文
件,此单元文件中以上方法变成了如下格式:procedure GetForecastResult(out
result: Double); double* 怎么变成double了?
而且,比如在delphi中声明了一个此com的对象为comtest。那么该如何调用以上方法呢?

我是新手,请大家多多帮忙~~
 
是C++翻译成Pascal的Out Result: Double
调用如下:
R: Double;
comtest.GetForecastResult(R);
给分吧。
 
>>double* 怎么变成double了?
由于该参数是 [out] 类型——是用于“输出”的参数,因此在传递参数的时候必须传变
量的地址,而不是普通的传值。在C++中,带了"*"的类型修饰表示该参数是传址调用,相应
的,在转换到Delphi语法后,自然就变成了: out result:Double ——前缀out表示该参数
用于输出。
在COM调用规定中,任何被[out]修饰的参数,都必须是指针类型,因此,这里的 double*
并不表示数组,而仅仅是为了迎合 out 修饰符而做的“包装”而已。

至于调用,用楼上的代码足矣(编译器会搞定剩下的事情:P)——COM变量用 Variant 类
型就可以了(当然,要先调用:comtest:=CreateOleObject('SomeCom.SomeInterface') 创
建COM对象)。
 
R: array[0..100] of Double;
comtest.GetForecastResult(R[0]);
------------------------------------
R: array of Double;
setlength(R, 100);
comtest.GetForecastResult(R[0]);
 
var
test:你的接口;
str:double;
begin
test:=你的coclass.createRemote(你的服务器地址);
test.GetForecastResult(str);//[red]这样就可以把值传过来[/red]
end;
 
后退
顶部