BTE>Дело в том, что мне необходимо вызвать функцию кроссплатформенной библиотеки, BTE>которая принимает в качестве аргумента BSTR, так вот как инициализировать BTE>эту BSTR — не знаю.
Какая-то странная кроссплатформенность.
Вобщем что такое BSTR написано тут: http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx — "ручками" ее сделать очень просто.
Как много веселых ребят, и все делают велосипед...
Один хрен.. Вопрос терминологии и буквоедства все равно ни понятие указатель на массив или на первый элемент массива не описывает толком ситуацию с BSTR
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
R>>Поправочка: указатель не на массив, а на первый элемент массива: O>Один хрен.. Вопрос терминологии и буквоедства все равно ни понятие указатель на массив или на первый элемент массива не описывает толком ситуацию с BSTR
Это не буквоедство. Указатель на ПЕРВЫЙ, а не НУЛЕВОЙ элемент
Пол-дня потратил на поиски безрезультатно.
В С++ я новичек, а под линукс — тем-более.
Есть код:
string = SysAllocString( L"string" );
который не компилируется под linux. Я знаю, что корни функции SysAllocString в Microsoft, в т. ч. и BSTR.
Компилятор ругается: undefined reference to `SysAllocString'.
Есть-ли в linux системах библиотеки реализующие данную функцию?
Здравствуйте, ByTE1974, Вы писали:
BTE>Есть-ли в linux системах библиотеки реализующие данную функцию?
Если стоит задача воспроизвести COM под linux, надо смотреть в сторону кроссплатформенных библиотек поддержки COM — какой-нибудь Comet...
(Это судя по упоминанию BSTR)
Если просто выделить строку — так обычный strdup("bytestr") / wcsdup(L"widestr").
А освобождать, соответственно, free().
Здравствуйте, ByTE1974, Вы писали:
BTE>Есть код:
BTE>
BTE>string = SysAllocString( L"string" );
BTE>
BTE>который не компилируется под linux. Я знаю, что корни функции SysAllocString в Microsoft, в т. ч. и BSTR. BTE>Компилятор ругается: undefined reference to `SysAllocString'. BTE>Есть-ли в linux системах библиотеки реализующие данную функцию?
А какая цель преследуется?
SysAllocString и BSTR — вещи, специфичные для СОМ.
_____________________
С уважением,
Stanislav V. Zudin
Дело в том, что мне необходимо вызвать функцию кроссплатформенной библиотеки,
которая принимает в качестве аргумента BSTR, так вот как инициализировать
эту BSTR — не знаю.
On 11/22/2011 01:31 PM, ByTE1974 wrote:
> которая принимает в качестве аргумента BSTR, так вот как инициализировать > эту BSTR — не знаю.
В общем-то BSTR --это wchar_t*.
Если эта вызываемая библиотека её освобождать не будет, только читать,
то всё будет вообще замечательно. Если попытается освободить -- немного хуже...
MZ>В общем-то BSTR --это wchar_t*.
читайте выше BSTR — это НЕ wchar_t*
это указатель на массив wchar_t но перед этим массивом должна лежать длина строки. То есть это скорее паскалеподобная строка.
Как много веселых ребят, и все делают велосипед...
BTE>Пол-дня потратил на поиски безрезультатно. BTE>В С++ я новичек, а под линукс — тем-более.
BTE>Есть код:
BTE>
BTE>string = SysAllocString( L"string" );
BTE>
Если будете передавать строчки по сети или хранить на диске для дальнейшей обработки на других платформах, то обратите внимание, что широкие строки в linux и в windows разной ширины!
Здравствуйте, ononim, Вы писали:
MZ>>В общем-то BSTR --это wchar_t*. O>читайте выше BSTR — это НЕ wchar_t* O>это указатель на массив wchar_t но перед этим массивом должна лежать длина строки. То есть это скорее паскалеподобная строка.
Поправочка: указатель не на массив, а на первый элемент массива:
A BSTR is a pointer. The pointer points to the first character of the data string, not to the length prefix.
Т.о. BSTR — это именно wchar_t*. Но, как ты верно уже заметил, это не простой wchar_t*, а устроенный определенным образом.
--
Справедливость выше закона. А человечность выше справедливости.
R>>>Поправочка: указатель не на массив, а на первый элемент массива: O>>Один хрен.. Вопрос терминологии и буквоедства все равно ни понятие указатель на массив или на первый элемент массива не описывает толком ситуацию с BSTR К>Это не буквоедство. Указатель на ПЕРВЫЙ, а не НУЛЕВОЙ элемент
в данном случае первый человеческий == нулевой Сишный
Как много веселых ребят, и все делают велосипед...