• COM中[int],[out],[out,retval]的含义


    COM中在声明函数中通常会这样:

    HRESULT getName([in]int ID,[out,retval]*BSTR name)

    实现函数时,这样:

    STDMETHODIMP Person::getName([in]int ID,[out,retval]*BSTR name)

    {

        ........

        *name='zhang san';

        return S_OK;

    }

    这里的[out,retval]限定符表示,参数name是作为一个输出参数存在的,且这个参数是作为一个返回值。什么意思呢?

    我们知道,对于c++中的普通函数而言,函数计算出来的值是可以直接返回的。但是在COM中,返回值只能是HRESULT类型。这个返回值表示函数运行过程中内部是否发生了错误。

    供调用者检查运行是否出错的。那么函数真正的返回值只能以指针的形式返回给由[out]限定的指针类参数了。

    但是,我们仍然想在COM中拥有像普通函数那样直接返回返回值的能力怎么办?

    [out,retval]限定符修饰的参数就可以使函数直接返回我们所需要的参数。

    所以上面的函数可以这么用:

    BSTR* name;

    name=getName(1617344);

    第二个参数直接被返回来了。

    注意:1.[out,retval]限定符在一个函数中只能有一个,且必须放置在最后一个参数位置上。

               2.无论是[out]还是[out,retval],所修饰的参数必须是指针参数,因为普通参数在函数调用完毕后就被销毁了,并不能得到返回值。

               3.个人习惯,能不这么用,尽量别这么用,直接用[out]限定符就可以了。

  • 相关阅读:
    一个不错的资源共享微盘
    LUA upvalue使用陷阱一例
    安卓破解视频教程合集
    开发Android逆向工具
    手机上编程,编写android apk
    smail修改字符串 汉字
    Android logcat命令详解
    protobuf
    Android Rxjava
    butterknife
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8572830.html
Copyright © 2020-2023  润新知