0
我有一個[dual]
接口實現IDispatch
,這樣的事情:COM:返回字符串或實際值的副本?
[dual, ...]
interface IMyInterface : IDispatch
{
[id(1), propget] HRESULT StringValue([out, string, retval] OLECHAR const ** str);
};
我對IMyInterface
後盾對象有一個成員變量,d_str
:
class CBackingObject : public IMyInterface
{
std::basic_string<OLECHAR> d_str;
...
};
什麼返回StringValue
財產COM約定?我應該返回d_str.data()
,還是拷貝呢?客戶端是否自動承擔釋放由字符串值屬性返回的字符串的責任?
感謝漢斯 - 很好的答案,我會根據合同進行修改。三個問題:(1)我應該返回一個*副本*,即SysAllocString()'d? (2)如果我有相應的'propput',我應該複製傳入的BSTR呢? (3)您能否將我鏈接到解釋合同的文檔? – 0xbe5077ed
SysAllocString已經使副本。設置者應該複製字符串內容,而不是指針,無論您想要保留哪種格式。使用谷歌鏈接,亞馬遜書籍。 –