這可能對你很有意思:
Eric's Complete Guide To BSTR Semantics
編輯:更多的細節,因爲那篇文章收集:
免責聲明:這關的。上面有我頭和我的包含嚴重的錯誤,直到但不限於因果關係的破壞和已知宇宙的結束。
struct BSTR_data {
short count;
wchar_t[] data;
};
typedef wchar BSTR;
BSTR * AllocateBSTR(wchar * str) {
if(str == 0) return 0;
short len = wstrlen(str);
BSTR_data * ret = new char[sizeof(short) + (sizeof(wchar_t) + 1) * len];
ret->count = len;
memcpy(ret->data, str, sizeof(wchar_t) * 2 * len);
ret->data[len] = 0;
return (BSTR *)(ret + sizeof(short));
}
void DeallocateBSTR(BSTR * str) {
if(str == 0) return;
BSTR_data * bstr = (BSTR_data*)(str - sizeof(short));
delete bstr;
}
這應該給你一個很好的想法。請注意,如果與Win32的交叉可比性很重要,則需要使用SysAllocString等來代替此代碼。
此[鏈接顯示BSTR長度前綴爲4個字節](https://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v = vs.85).aspx)。我只是看內存而且我認爲是真的。 – lsalamon 2015-03-10 17:06:13