这对您来说可能很有趣:
Eric 的 BSTR 语义完整指南
编辑:从那篇文章中收集到的更多细节:
免责声明:这是我的想法,并且我包含严重的错误,直到但不限于因果关系的破坏和已知宇宙的终结。
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 等代替此代码。