SysAllocString для Linux
От: ByTE1974  
Дата: 22.11.11 07:34
Оценка:
Здраствуйте.

Пол-дня потратил на поиски безрезультатно.
В С++ я новичек, а под линукс — тем-более.

Есть код:

string = SysAllocString( L"string" );


который не компилируется под linux. Я знаю, что корни функции SysAllocString в Microsoft, в т. ч. и BSTR.
Компилятор ругается: undefined reference to `SysAllocString'.
Есть-ли в linux системах библиотеки реализующие данную функцию?

Спасибо,
Вадим.
Re: SysAllocString для Linux
От: Кодт Россия  
Дата: 22.11.11 07:46
Оценка:
Здравствуйте, ByTE1974, Вы писали:

BTE>Есть-ли в linux системах библиотеки реализующие данную функцию?


Если стоит задача воспроизвести COM под linux, надо смотреть в сторону кроссплатформенных библиотек поддержки COM — какой-нибудь Comet...
(Это судя по упоминанию BSTR)

Если просто выделить строку — так обычный strdup("bytestr") / wcsdup(L"widestr").
А освобождать, соответственно, free().
Перекуём баги на фичи!
Re: SysAllocString для Linux
От: Stanislav V. Zudin Россия  
Дата: 22.11.11 07:48
Оценка:
Здравствуйте, 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
Re[2]: SysAllocString для Linux
От: ByTE1974  
Дата: 22.11.11 09:31
Оценка:
Дело в том, что мне необходимо вызвать функцию кроссплатформенной библиотеки,
которая принимает в качестве аргумента BSTR, так вот как инициализировать
эту BSTR — не знаю.
Re[3]: SysAllocString для Linux
От: ononim  
Дата: 22.11.11 09:44
Оценка: +1
BTE>Дело в том, что мне необходимо вызвать функцию кроссплатформенной библиотеки,
BTE>которая принимает в качестве аргумента BSTR, так вот как инициализировать
BTE>эту BSTR — не знаю.
Какая-то странная кроссплатформенность.
Вобщем что такое BSTR написано тут: http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx — "ручками" ее сделать очень просто.
Как много веселых ребят, и все делают велосипед...
Re[3]: SysAllocString для Linux
От: MasterZiv СССР  
Дата: 22.11.11 10:34
Оценка:
On 11/22/2011 01:31 PM, ByTE1974 wrote:

> которая принимает в качестве аргумента BSTR, так вот как инициализировать

> эту BSTR — не знаю.

В общем-то BSTR --это wchar_t*.
Если эта вызываемая библиотека её освобождать не будет, только читать,
то всё будет вообще замечательно. Если попытается освободить -- немного хуже...
Posted via RSDN NNTP Server 2.1 beta
Re[4]: SysAllocString для Linux
От: ononim  
Дата: 22.11.11 10:44
Оценка:
MZ>В общем-то BSTR --это wchar_t*.
читайте выше BSTR — это НЕ wchar_t*
это указатель на массив wchar_t но перед этим массивом должна лежать длина строки. То есть это скорее паскалеподобная строка.
Как много веселых ребят, и все делают велосипед...
Re: SysAllocString для Linux
От: MShura  
Дата: 22.11.11 11:28
Оценка:
BTE>Пол-дня потратил на поиски безрезультатно.
BTE>В С++ я новичек, а под линукс — тем-более.

BTE>Есть код:


BTE>
BTE>string = SysAllocString( L"string" );
BTE>


Если будете передавать строчки по сети или хранить на диске для дальнейшей обработки на других платформах, то обратите внимание, что широкие строки в linux и в windows разной ширины!
Re[5]: SysAllocString для Linux
От: rg45 СССР  
Дата: 22.11.11 13:32
Оценка:
Здравствуйте, 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*, а устроенный определенным образом.
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: SysAllocString для Linux
От: ononim  
Дата: 22.11.11 15:23
Оценка: +1
R>Поправочка: указатель не на массив, а на первый элемент массива:
    typedef char foot[32];
    foot f;
    foot *f1 = &f;
    char *f2 = f;
    printf("0x%x 0x%x\n", f1, f2);
    getch();

Один хрен.. Вопрос терминологии и буквоедства все равно ни понятие указатель на массив или на первый элемент массива не описывает толком ситуацию с BSTR
Как много веселых ребят, и все делают велосипед...
Re[7]: SysAllocString для Linux
От: Кодт Россия  
Дата: 22.11.11 15:42
Оценка: -1
Здравствуйте, ononim, Вы писали:

R>>Поправочка: указатель не на массив, а на первый элемент массива:

O>Один хрен.. Вопрос терминологии и буквоедства все равно ни понятие указатель на массив или на первый элемент массива не описывает толком ситуацию с BSTR

Это не буквоедство. Указатель на ПЕРВЫЙ, а не НУЛЕВОЙ элемент
Перекуём баги на фичи!
Re[8]: SysAllocString для Linux
От: ononim  
Дата: 22.11.11 15:54
Оценка:
R>>>Поправочка: указатель не на массив, а на первый элемент массива:
O>>Один хрен.. Вопрос терминологии и буквоедства все равно ни понятие указатель на массив или на первый элемент массива не описывает толком ситуацию с BSTR
К>Это не буквоедство. Указатель на ПЕРВЫЙ, а не НУЛЕВОЙ элемент
в данном случае первый человеческий == нулевой Сишный
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.