Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
(Модератор:
Вад
) > Тема:
CComBSTR to LPCTSTR
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: CComBSTR to LPCTSTR (Прочитано 14716 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Fireworm
Гость
CComBSTR to LPCTSTR
«
:
07-08-2003 15:26 »
Помогите конвертнуть строку из CComBSTR в LPCTSTR.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
CComBSTR to LPCTSTR
«
Ответ #1 :
07-08-2003 17:09 »
Как я понял CComBSTR - хоть я и не знаю что це таке за объект - очень похоже на MFC.
Исходя из этого должон быть либо перегружен либо определен метод вытяжки стркои из объекта в чистом виде.
После чего обычная строка
a = (LPCTSTR) b;
дает приведение типов - так как конвертирует.
Записан
А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист
Offline
CComBSTR to LPCTSTR
«
Ответ #2 :
08-08-2003 05:29 »
CComBSTR это класс обертка для BSTR, есть оператор operator BSTR(), поэтому можешь преобразовывать ее также как и любой BSTR, который по сути указатель на UNICODE строку.
Таким образом
CComBSTR ccStr(L"Fireworm");
BSTR bstr;
bstr = ccStr;//вызов ccStr.operator BSTR()
таким образом bstr указывает на UNICODE строку L"Fireworm".
Только внимание- эта строка принадлежит классу ccStr и будет удалена его деструктором, лучше эту строку не трогать и если тебе надо ее изменить, сделай ее копию через SysAllocStringLen.
//-------------------------------------------------------------------------
А вот пример из Platform SDK
// Declare a CComBSTR object. Although the argument is ANSI,
// the constructor converts it into UNICODE.
CComBSTR bstrMyString( "Hello World" );
// Convert the string into an ANSI string
CW2CT szMyString( bstrMyString );
// Display the ANSI string
MessageBox( NULL, szMyString, _T("String Test"), MB_OK );
Записан
Fireworm
Гость
CComBSTR to LPCTSTR
«
Ответ #3 :
08-08-2003 06:25 »
Вся проблема была в том что у меня макросы W2A, W2CT и т.д. ругались на моменте компиляции, и я очень долго не мог понять за что. Оказалась перед использованием макросов надо было вставить
USES_CONVERSION;
и все встало на свои места.
Всем спасибо.
Записан
kisilevski
Постоялец
Offline
Пол:
CComBSTR to LPCTSTR
«
Ответ #4 :
18-08-2003 11:32 »
Можно и без USER_CONVERSION:
Пусть есть некий BSTR B. и CString s.
В этом случае можно писать s=CString(B).
А ежели надо провести обратное преобразование,
то B=s.AllocSysString();
, поскольку объект типа BSTR-это указатель.
Но после использования надо
освободить занимаемую строкой память:
SysFreeString(B);
Записан
Ложки нет. See MSDN for details.
Fireworm
Гость
CComBSTR to LPCTSTR
«
Ответ #5 :
18-08-2003 12:04 »
Проблема в том, что CString -это класс MFC. Поэтому он совсем не всегда подходит. Да и надо было конвертировать не в CString, а в char *
Записан
Yess
Гость
CComBSTR to LPCTSTR
«
Ответ #6 :
25-08-2003 04:09 »
Только не стоит забывать что макросы типа W2A, A2W и им подобные выделяют память с помощью функции CRT alloca, выделяющей память на стеке(максимум 512кб , если не ошибаюсь). Использование этих макросов оправдано только для небольших кусков текста. Если надо больше(файлы всякие конвертить) тогда MultiByteToWideChar.
Записан
SlavaI
Главный специалист
Offline
CComBSTR to LPCTSTR
«
Ответ #7 :
25-08-2003 11:50 »
Цитата
выделяющей память на стеке(максимум 512кб , если не ошибаюсь)
В юзер моде стек по умолчанию 1Мб, но может быть расширен при сборке программы. Размер стека ограничен только непрерывным куском виртуального адресного пространства.
В режиме ядра стеки фиксированы и не расширяемы.
Записан
Yess
Гость
CComBSTR to LPCTSTR
«
Ответ #8 :
26-08-2003 00:10 »
Цитата: SlavaI
Цитата
выделяющей память на стеке(максимум 512кб , если не ошибаюсь)
В юзер моде стек по умолчанию 1Мб, но может быть расширен при сборке программы. Размер стека ограничен только непрерывным куском виртуального адресного пространства.
В режиме ядра стеки фиксированы и не расширяемы.
Это все верно, просто alloca из червертой студии могла только <512kB выделять, а в VC6 & VC7 поправили, там максимум ограничен размером стека.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
(Модератор:
Вад
) > Тема:
CComBSTR to LPCTSTR
Загружается...