编写COM组件时,创建一个方法:TurnCodeToName, 我想在客户端输入一个字符串,然后调用此方法,我不知道怎么返回一个字符串?(40分)

  • 主题发起人 主题发起人 whhzkl
  • 开始时间 开始时间
W

whhzkl

Unregistered / Unconfirmed
GUEST, unregistred user!
编写COM组件时,创建一个方法:TurnCodeToName, 我想在客户端输入一个字符串,然后调用此方法,我不知道怎么返回一个字符串?
刚学COM, 还不清楚里面的数据类型(如BSTR),望高手指教!!!
 
这是接口里的方法:
procedure TMyBinLi.TurnCodeToName(const s: WideString;
out Result: WideString);
begin
AdoQuery_Staff.sql.clear;
AdoQuery_Staff.SQL.Clear;
AdoQuery_Staff.SQL.Add('selectdo
ctorName, DepartName from staff wheredo
ctorCode = '+ '''' + s + '''');
AdoQuery_Staff.Prepared;
AdoQuery_Staff.ExecSQL;
AdoQuery_Staff.Open;
Form1.Edit1.Text := AdoQuery_Staff.Fieldbyname('DoctorName').AsString;
Result := AdoQuery_Staff.Fieldbyname('DoctorName').AsString;
end;

为什么客户端调用却不行:Edit1.text:=MyBingLi.TurnCodeToName('12');
 
试试
var
s:widestring;
mybingli.turncodetoname('12',s);
edit1.text:=s;
 
To shangshang:
不行呀! 报错:
Too many actual parameters
 
用函数返回!!怎么能用过程呢?
 
不好意思,函数怎么设置呢?
 
把返回值设为BSTR,
你把返回值删除了,所以就成了过程!!
另外,你那个RESULT参数不要了!!
 
谢谢大家,我看了别的帖子,知道要另外再设一个Value值, 设为BSTR* ,[out, retval],就可以了, procedure 就成了 function 。 可我想重新注册此 Project1.tlb , 发现不行了,又将里面的名称改了, tlb里出现了提示:‘Hint: typeinfo 'MyBingLi' change to 'MyBingLi_'’ 搞了好长时间, 还是不行,我刚接触COM, 还不太清楚, 望高手指教
 
我也想知道
 
后退
顶部