BSTR, как сделать самостоятельно?
Мне нужно связать приложение Linux с сервером, который использует данные BSTR. Могу ли я "свернуть" свой собственный код, чтобы сделать bstr? Я знаю основы bstr, что у него есть заголовок с байтовым размером минус нулевой терминатор, и из-за заголовка он может содержать нули в середине строки и в основном все остальные правила, следующие за bstr.
Я не уверен в порядке следования байтов в заголовке или в более интимных деталях, например, передаю ли я данные, указывая на заголовок, или 5-й байт, как это делает com? Кто-нибудь знает, где я могу получить эту информацию или кто-то написал класс типа BSTR для Linux? Или вообще, где я могу найти информацию о деталях bstr, а не просто общие обзоры, основанные на библиотеках Microsoft?
Спасибо
1 ответ
Это может быть интересно для вас:
Полное руководство Эрика по семантике 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 и т. Д. Вместо этого кода.