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如何做到防止代码膨胀?
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如何做到防止代码膨胀?
为的是让一些脚本语言知道哪个是返回值,
在这些脚本语言中, 所作函数的返回值不是 HRESULT 了,
而是 retval 指定的那个值.代码膨胀, 防止的最好办法就是不写.
Advise([in] ICallBack *pCallBack,[out] long *pdwCookie)
这个函数见过没?out 没和retval 放在一块!
2 retval 必须是最后一个参数out可以出现在任何参数上
两人说的不一样的你说必须 ,他说不必须我做过实验,
Advise([in] ICallBack *pCallBack,[out] long *pdwCookie)
看,没有retval 吧?
是否你的意思是: out 可以不比有retval ,但是用retval的时候,就一定要有out?
getXXX(1, &bstrV);而 javascript, vb, delphi ...则封装成 string = getXXX(1);的形式了.所以 retval 的必然是 out 的, out 的则不一定非要作为返回值型