zoukankan      html  css  js  c++  java
  • 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]限定符就可以了。

  • 相关阅读:
    接口interface
    枚举类型
    编写Hello World ts程序
    TypeScript基本类型
    初始TypeScript
    session和cookie自动登录机制
    奇辉机车车号自动识别系统介绍
    AForge.NET 设置摄像头分辨率
    工作感概—活到老xio到老
    Scala学习二十二——定界延续
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8572830.html
Copyright © 2011-2022 走看看