delphi编写的COM接口,函数如何传出字符串? ( 积分: 100 )

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

sunstone

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi编写的COM接口,函数如何传出字符串?能够让php、asp等程序调用
 
你在实现接口的类里定义好哪个参数是IN,哪里是OUT就行了,
然后你就在你想要的地方搞用啊。这不难吧
 
HRESULT _stdcall GetReceiveInfo([in] BSTR ci, [in] BSTR login, [in] BSTR mail, [out, retval] BSTR * Output );
asp,php传给这个函数最后一个参数应该是指针,但是php,asp没有指针类型呀
 
olevariant类型就可以
 
[out, retval] BSTR * Output );
你的意思是我把程序的output变量 修改成 olevariant类型 ?
 
输出必须用指针吧
 
如果要让ASP调用,而且有输出参数,那么必须把输出参数定义为VARIANT *
 
to ysai:
asp程序中怎么调用呢VARIANT *,能简单给个例子么,多谢
 
VARIANT * 应该也是一个地址
php好像没有地址指针这个概念呀
 
php 和 asp对应应该用什么变量呢
 
就是在Type Library里,输出参数定义为VARIANT *
ASP里调用就是定义个变量传进去就行了

例如D里定义这么个对象
THttpRequest = class(TAutoObject, IHttpRequest)
public
//在Type Library里,类型分别为BSTR,BSTR,VARIANT_BOOL,VARIANT *,VARIANT *,VARIANT *,VARIANT *,VARIANT *
//前三个输入参数,类型可以不为VARIANT *,后5个输出参数,一定得用VARIANT *
procedure Get(const Address, URL: WideString; Redirect: WordBool;
out Status, Data, ConnectTime, GetTime, MD5: OleVariant); safecall;
end;

脚本语言调用:
Dim o
Dim IPaddress, url, autoRedirect
Dim i,s,t1,t2,md5

autoRedirect = true
set o = CreateObject("HttpTest.HttpRequest")
url = "http://dldn.icast.cn/icast/mv/samsung/44611/title.swf"
IPaddress = "222.73.237.48"
o.Get IPaddress, url, autoRedirect, i, s, t1, t2, md5
 
多谢各位指点,问题已经解决,而且php和asp调用com已经调试成功,现将方法总结一下,留给新手提供之用:
1.输入参数是IN,输出参数是OUT
2.Out参数如果要被多种语言调用,尽量使用VARIANT *,
3.其他语言正常调用函数就行了,而且输出变量没有大小限制,我试验过了。不像dll对大字符串必须使用pchar,很麻烦的。
 
另外,还有一个疑惑:
大家都知道,dll动态库输出的字符串是有长度限制的,除非使用pchar或是使用sharemem单元。
而com接口传出的字符串长度好像没有限制,我试验过了。

不知道com接口有没有字符串长度限制?能否给个明确的回答?
 
后退
顶部