1.
com接口函数的参数类型 out,retval  
 retval 是必须的吗?
out对应指针类型,自然就可以返回了,对吧为什么有的文章说retval也要和out一块加上呢2.
ATL_NO_VTABLE  无虚表宏
//这里有个宏
class ATL_NO_VTABLE CFun :  
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFun, &CLSID_Fun>,
public IFun如何做到防止代码膨胀?

解决方案 »

  1.   

    retval也要和out一起加上,
    为的是让一些脚本语言知道哪个是返回值,
    在这些脚本语言中, 所作函数的返回值不是 HRESULT 了,
    而是 retval 指定的那个值.代码膨胀, 防止的最好办法就是不写.
      

  2.   


    Advise([in] ICallBack *pCallBack,[out] long *pdwCookie)
    这个函数见过没?out 没和retval 放在一块!
      

  3.   

    retval 非必须, 你自己理解吧
      

  4.   

    1 retval 必须和out一起使用
    2 retval 必须是最后一个参数out可以出现在任何参数上
      

  5.   


    两人说的不一样的你说必须 ,他说不必须我做过实验,
    Advise([in] ICallBack *pCallBack,[out] long *pdwCookie)
    看,没有retval 吧?
    是否你的意思是: out 可以不比有retval ,但是用retval的时候,就一定要有out?
      

  6.   

    你只使用 c++ 的化, 可以忽略 retvalout 的语义就够了.比如HRESULT getXXX(int id, [retval, out] BSTR* bstrValue);你在 c++ 调用
    getXXX(1, &bstrV);而 javascript, vb, delphi ...则封装成 string = getXXX(1);的形式了.所以 retval 的必然是 out 的, out 的则不一定非要作为返回值型
      

  7.   

    http://hanhongke123.blog.163.com/blog/static/6222349420110203338503/