感觉在ATL中做COM组件,添加方法的时候,其返回值只能是HRESULT,我想返回其他数据类型,可以吗?

非也非也 HRESULT指示返回的状态,即正确与否, 返回值是这样的 HRESULT MyMethod([in]int p1,[out,retval]int *pRetval); 在VB和脚本里就可以n=obj.MyMethod(123)

这是COM规范规定的,其他同上

COM规范并没有规定接口成员函数一定要返回HRESULT,可以返回其它类型的值,使用其它类型值时,组件没有远程能力,组件不能保证与其他组件正常通讯。但你使用了ATL,可能ATL在编译时会限制你的函数返回值类型。 这是我的理解,关于ATL我不清楚,以上观点如有错误,欢迎指正

同意楼上。想返回其他数据类型可以在参数中传递地址。

HRESULT除了反映正确与否,还可能是一个错误码,因为组件不能简单抛出C++异常,必须正确返回,以错误码和ISupportErrorInfo接口等对错误信息提供支持。 普通返回值做不到这一点儿。 对于VB等可以直接使用返回值的语言,只能用参数修饰的方法来做, [out, retval] type*

HRESULT只是返回了你组件的执行状况是否有异常,你可以根据HRESULT捕捉错误,你可以使用自己需要的数据类型,在参数中传递地址。

http://www.fx114.net/qa-215-39830.aspx

=============================================================

如何从COM接口返回字符串

STDMETHODIMP CFun::Cat(BSTR s1, BSTR s2, BSTR *pVal) 

 CComBSTR sResult( s1 ); 
 sResult.AppendBSTR( s2 );

*pVal = sResult.Copy();

return S_OK; 
}

忘记说了上述方法的in-out类型如下:
HRESULT Cat([in]BSTR s1, [in]BSTR s2, [out,retval]BSTR* pVal);

一个函数中,可以有多个[in]、[out],但[retval]只能有一个,并且要和[out]组合后在最后一个位置。

------------------------------------------------------------------------------------------------------------------------------

http://bbs.csdn.net/topics/190110366

ATL接口返回类型&&ATL接口返回字符串BSTR*的更多相关文章

  1. webapi的返回类型,webapi返回图片

    1.0 首先是返回常用的系统类型,当然这些返回方式不常用到.如:int,string,list,array等.这些类型直接返回即可. public List<string> Get() { ...

  2. Web API 2:Action的返回类型

    Web API 2:Action的返回类型 Web API控制器中的Action方法有如下几种返回类型: void HttpResponseMessage IHttpActionResult 其它类型 ...

  3. c++ 类覆盖方法中的协变返回类型

    c++ 类覆盖方法中的协变返回类型 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型.这样的类型称为协变返回类型(Covarian ...

  4. [经验分享]WebAPI中返回类型JsonMessage的应用

    这是一个绝无仅有的好类型,一个你爱不释手的好类型,好了,不扯了,直接上干货. 相信大家都知道,在调用接口的时候返回Json数据已经成为一种不成文的标准,因为它的解析快,易读等优秀的特性,所以被绝大多数 ...

  5. Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  6. ASP.NET Web API 2:Action的返回类型

    Web API控制器中的Action方法有如下几种返回类型: void HttpResponseMessage IHttpActionResult 其它类型 基于上面几种不同的返回类型,Web API ...

  7. [C#] async 的三大返回类型

    async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...

  8. Effective Java 第三版——41.使用标记接口定义类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  9. async 的三大返回类型

    序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task<TResult>. ...

随机推荐

  1. GLSL 内建函数

    内建函数基本上可以分为一下三类: (1)它们使用一些简便的方式提供必要的硬件功能,如材质贴图.这些函数单独通过着色器是无法模拟出来的. (2)它们展示了一些可以常简单的写入的繁琐操作(clamp, m ...

  2. 在eclipse中使用git clone 别人共享在Github的代码和上传到自己的仓库!

    原文地址:http://www.itdaan.com/blog/2014/10/24/ff5e03b5cefef19e1b6fbb7b49809846.html1.在eclipse中安装git:打开e ...

  3. 使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数

    在为开源项目 easiwin/MSTestEnhancer 进行持续集成编译时,需要在编译命令中传入较多的参数.这对于新接手此项目的人来说,成本还是高了一点儿.本文将介绍 MSBuild 响应文件 ( ...

  4. js 时间date格式化

    js中没有类似java中的DateFormat类来处理日期格式化,可以自己写一个: var newDate=new Date(); var year=newDate.getFullYear(); va ...

  5. PHP5.3、PHP5.4、PHP5.5、PHP5.6的新特性

    1. PHP5.3中的新特性 1.1 支持命名空间(namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,可以用命名空间防止代码的冲突,命名空间的分隔符为 ...

  6. Python: 为对象动态添加函数,且函数定义来自一个str

    转自:http://blog.sina.com.cn/s/blog_55a11f330100ab1x.html 在Python中,通常情况下,你只能为对象添加一个已经写好的方法 需求:传入一个str类 ...

  7. python模块--time模块

    1.时间戳 import time #------->> 时间戳 print(time.time()) 1525418832.2835853 2.结构化时间 #------->> ...

  8. cargo rust 包管理工具

    1. 安装 yum 或者官方提供的包,比较简单 curl -sSL https://static.rust-lang.org/rustup.sh | sh 2. 帮助命令 cargo --help U ...

  9. Go语言学习笔记 package

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 strings import "strings" strings包实现了用于操作字符的简单函数 ...

  10. jQuery实现清空table表格除首行外的所有数据

    1.其实网上有很多版本,试了好几个都不行,最后还是查到了一个非常方便的:不会清除表格第一行表头部分. 其中J_tab_fam是table的id. ? 1 $("#J_tab_fam  tr: ...