COM程序中某函数欲返回一个string类型,如何定义其类型,给VB调用用OleVariant出错,LPSTR也不中。。。急~~还有如何返回多个参数呢????感

  • 主题发起人 主题发起人 Nizvoo
  • 开始时间 开始时间
N

Nizvoo

Unregistered / Unconfirmed
GUEST, unregistred user!
COM程序中某函数欲返回一个string类型,如何定义其类型,给VB调用用OleVariant出错,LPSTR也不中。。。急~~还有如何返回多个参数呢????感谢昨天大伙的顶 (100分)<br />COM程序中某函数欲返回一个string类型,如何定义其类型,给VB调用用OleVariant出错,LPSTR也不中。。。急~~
 
BSTR---WideString呢,呵呵
 
差点忘讲这个BSTR了,一用这个就听到声音。。。呵呵,出错也~~

Variant*没有这个~
 
在TLB中选取后就变成OLEVARIANT
 
要不要做些什么初始化的工作
 
能不能用pchar型啊
 
如果你用了TLB,那就好办了.
第一,决不要改变接口中函数的返回类型,确保返回的是HRESULT,
第二,添加一个返回参数,参数名随便起,Modifier设为out, ret,类型为Variant*.
 
为什么不能改变呢?
我除了两个串要取这个值,其它的我用的是WordBool返回,效果良好。
 
你按我说的试一试效果便知.
 
Com规范要求返回值必须是HResult,是一个整型.所以不能返回其它值.只有加一个输出参
数才解决这个问题.
 
就是用一个函数来检查做的结果,y/n???
out
 
缘何能返回WordBool,而且在里头可以选取那些type
 
其实,你如果对一个参数的Modifier设为out retval后,就等于是设置了函数的返回值.
你改了以后refresh一下,再看看生成的代码,就什么都明白了.
你原来改为WordBool是不正确的做法,没出错仅仅是巧合.
 
我是在tlb上头改了,按那个刷新后生成的pas。
 
你如果舍不得试一下,那我也没招了.
 
我试了的。。。

但还是不能访问。。

我把

function TTFyCom.CheckResult(out rvalue: OleVariant): HResult;
begin
rvalue := ‘123’;

end;

我依旧取不到值
 
呵呵,你做错了.
在TLB里:设置CheckResult的返回类型为HResult,添加一个参数rvalue,类型为Variant*,Modifier
中选中out和retval.
点击Refresh后生成的pas代码绝不是你帖出来的这样.
 
Bstr* 可以的呀

HRESULT _stdcall RemB([in] BSTR ins, [out, retval] BSTR * outs );
 
我重新开了一个Project怎么也生成这样子
 
后退
顶部