问一个很菜的问题,关于COM的

IT动力 2003-10-16 08:07:29
小弟用BCB6创建了一个Active Library名为Project1的工程,并加入了一个Automation Object名为Test.目的是为了能在服务器上被ASP调用.
现在的问题是:当我在为Test加入方法时,返回值的类型必须定义为HRESULT.而我想用这个方法返回一个字符串.请问这应该怎么做?
另外,各位能不能推荐一本比较好的这方面的书?
见笑了,小弟初学COM开发.
...全文
38 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljianq 2003-10-17
  • 打赏
  • 举报
回复
在COM接口方法中将参数设为[retval]就可以了,注意在一个方法中只能有一个这样的参数,

你就可以直接使用:
变量=对象.方法(),来取返回结果。

如果你要返回多个值,可以将参数设为[Out] 或 [in,out],当然参数要求是指针。
ThinkX 2003-10-16
  • 打赏
  • 举报
回复
在MIDL中,out的参数上有没有retval,应该使用retval的。
你的COM基础不好,去找书看看,然后看看msdn吧。
COM是一个规范,要求你的代码必须符合这个规范,才能被其他开发环境使用。
IT动力 2003-10-16
  • 打赏
  • 举报
回复
我又在此项目中加入了一个COM Object名为Test1.并加入了一个方法GetCommandText,方法的返回值是BSTR类型.但在ASP页面中用
var a = Server.CreateObject("Project1.Test1");
Response.Write(a.GetCommandText());
调用时,发生错误:
服务器对象 错误 'ASP 0177 : 80004002'

Server.CreateObject 失败

/Default.asp,行4

不支持此接口
请问这应该如何解决?
ThinkX 2003-10-16
  • 打赏
  • 举报
回复
永远不要利用COM的HRESULT做其它用途,其它的开发工具会不认这个值的。尤其是VB等,它会检测这个值以便抛出异常。你可以利用out的参数返回值

HREUSET YoutComObject::GetString(BSTR* out)
{
BSTR s = SysAllocString(L"A Message");
*out = s;
}

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧