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]限定符就可以了。

  • 相关阅读:
    hdu 1712(分组背包)
    hdu 3033(好题,分组背包)
    阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)
    hdu 1559(最大子矩阵)
    hdu 1080(LCS变形)
    POJ 3458 Colour Sequence
    HUST 1599 Multiple
    HDU 3903 Trigonometric Function
    HUST 1605 Gene recombination
    UVA 11551 Experienced Endeavour
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8572830.html
Copyright © 2011-2022 走看看