• ATL接口返回类型&&ATL接口返回字符串BSTR*


    感觉在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

  • 相关阅读:
    润乾集算报表的脚本数据集
    R语言数据分析系列之五
    iOS_隐藏顶部状态栏
    机器学习(Machine Learning)&深度学习(Deep Learning)资料
    Linux xargs将输出数据流转换成命令参数
    自己动手写病毒
    okhttp的简介(二)之简单封装
    Android中图形截取的方式介绍
    为何在查询中索引未被使用 (Doc ID 1549181.1)
    Giraph源代码分析(六)——Edge 分析
  • 原文地址:https://www.cnblogs.com/wainiwann/p/7219189.html
Copyright © 2020-2023  润新知