Это может быть интересно для вас:
Полное руководство Эрика по семантике 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 и т. Д. Вместо этого кода.