1C&VC++ передача параметров

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Stele
Сообщения: 19
Зарегистрирован: 25 авг 2004, 07:31

в функцию динамической библиотеки (на VC++) передается строка например "Path" из 1С как тип BSTR str. В функции объявляю такую же строку BSTR bstr = NULL;
bstr = SysAllocString ( L"Path" );
Затем эти строки сравниваю - результат они не равны. Почему??? Кто сталкивался с подобной проблемой?
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Попробуй их сравнивать через lstrcmp()
2B OR NOT(2B) = FF
Stele
Сообщения: 19
Зарегистрирован: 25 авг 2004, 07:31

проверил, функция lstrcmp() не работает с типами BSTR
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сами указатели конечно же не равны, они ведь указывают на разные участки памяти :) Строки сравнивать нужно с помощью специальных функций. Для BSTR строк подойдёт например _mbccmp или wcscmp.

P.S. Советую использовать враперы для работы с такими строками (например CComBSTR или _bstr_t). А то ликов не оберёшься. Например в участке кода, который ты привёл (всего в двух строчках), уже есть лик.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

проверил, функция lstrcmp() не работает с типами BSTR
Там нужна lstrcmpW(). А при UNICODE - компиляции lstrcmpW() и lstrcmp() идентичны.

BSTR - это тоже самое что указатель на строку с широкими символами (WCHAR *).
Только для этих строк специальный менеджмент памяти нужен (SysAllocString() / SysFreeString()).
2B OR NOT(2B) = FF
Ответить