几乎所有的COM方法都会返回一个HRESULT类型的错误号. 为了让方法返回一个与"方法的物理"HRESULT"不相关的逻辑结果,COM IDL支持retval参数属性. retval参数属性含义是,相关联的物理方法参数实际上是操作系统的逻辑结果,在支持retval的环境中,该参数应该被映射为操作系统的结果.例如,给定下面的IDL方法定义:HRESULT Method2([in] shout arg1,[out,retval] short *parg2);在JAVA中,应该映射为下面的函数: public short Method2(short arg1);而在BASIC中,方法定义如下: Function Method2(arg1 as Interger) As Integer因为C++没有专门的运行库支持COM接口的访问操作,所以Microsoft C++将这个方法映射为下面的函数: virtual HRESULT _stdcall Method2(short arg1,short *parg2)=0;所以如果你用VC,你应该习惯将一般函数的返回值在COM方法中做为一个指针参数看待!
return s_ok等只是com内部返回的,在client端是接收不到此返回值的
为了让方法返回一个与"方法的物理"HRESULT"不相关的逻辑结果,COM IDL支持retval参数属性.
retval参数属性含义是,相关联的物理方法参数实际上是操作系统的逻辑结果,在支持retval的环境中,该参数应该被映射为操作系统的结果.例如,给定下面的IDL方法定义:HRESULT Method2([in] shout arg1,[out,retval] short *parg2);在JAVA中,应该映射为下面的函数:
public short Method2(short arg1);而在BASIC中,方法定义如下:
Function Method2(arg1 as Interger) As Integer因为C++没有专门的运行库支持COM接口的访问操作,所以Microsoft C++将这个方法映射为下面的函数:
virtual HRESULT _stdcall Method2(short arg1,short *parg2)=0;所以如果你用VC,你应该习惯将一般函数的返回值在COM方法中做为一个指针参数看待!