в функцию динамической библиотеки (на VC++) передается строка например "Path" из 1С как тип BSTR str. В функции объявляю такую же строку BSTR bstr = NULL;
bstr = SysAllocString ( L"Path" );
Затем эти строки сравниваю - результат они не равны. Почему??? Кто сталкивался с подобной проблемой?
1C&VC++ передача параметров
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
проверил, функция lstrcmp() не работает с типами BSTR
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Сами указатели конечно же не равны, они ведь указывают на разные участки памяти
Строки сравнивать нужно с помощью специальных функций. Для BSTR строк подойдёт например _mbccmp или wcscmp.
P.S. Советую использовать враперы для работы с такими строками (например CComBSTR или _bstr_t). А то ликов не оберёшься. Например в участке кода, который ты привёл (всего в двух строчках), уже есть лик.

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