ATL接口返回類型&&ATL接口返回字符串BSTR*
感覺在ATL中做COM組件,添加方法的時候,其返回值只能是HRESULT,我想返回其他數據類型,可以嗎?
非也非也 HRESULT指示返回的狀態,即正確與否, 返回值是這樣的 HRESULT MyMethod([in]int p1,[out,retval]int *pRetval); 在VB和腳本裏就可以n=obj.MyMethod(123)
這是COM規範規定的,其他同上
COM規範並沒有規定接口成員函數一定要返回HRESULT,可以返回其它類型的值,使用其它類型值時,組件沒有遠程能力,組件不能保證與其他組件正常通訊。但你使用了ATL,可能ATL在編譯時會限制你的函數返回值類型。 這是我的理解,關於ATL我不清楚,以上觀點如有錯誤,歡迎指正
同意樓上。想返回其他數據類型可以在參數中傳遞地址。
HRESULT除了反映正確與否,還可能是一個錯誤碼,因為組件不能簡單拋出C++異常,必須正確返回,以錯誤碼和ISupportErrorInfo接口等對錯誤信息提供支持。 普通返回值做不到這一點兒。 對於VB等可以直接使用返回值的語言,只能用參數修飾的方法來做, [out, retval] type*
HRESULT只是返回了你組件的執行狀況是否有異常,你可以根據HRESULT捕捉錯誤,你可以使用自己需要的數據類型,在參數中傳遞地址。
http://www.fx114.net/qa-215-39830.aspx
=============================================================
如何從COM接口返回字符串
STDMETHODIMP CFun::Cat(BSTR s1, BSTR s2, BSTR *pVal)
{
CComBSTR sResult( s1 );
sResult.AppendBSTR( s2 );
*pVal = sResult.Copy();
return S_OK;
}
忘記說了上述方法的in-out類型如下:
HRESULT Cat([in]BSTR s1, [in]BSTR s2, [out,retval]BSTR* pVal);
一個函數中,可以有多個[in]、[out],但[retval]只能有一個,並且要和[out]組合後在最後一個位置。
------------------------------------------------------------------------------------------------------------------------------
http://bbs.csdn.net/topics/190110366
ATL接口返回類型&&ATL接口返回字符串BSTR*