Конвертация строк
От: Whistler Россия Блог на GotDotNet.ru
Дата: 21.12.04 13:43
Оценка:
Добрый день!

Мне надо в функцию SysAllocString(const OLECHAR *) в качестве параметра всунуть значение переменной типа char [];

char A[10]; к примеру,

как мне преобразовать тип этой переменной в OLECHAR ...

Заранее спасибо!
Re: Конвертация строк
От: Flex2 Россия  
Дата: 21.12.04 13:48
Оценка:
Здравствуйте, Whistler, Вы писали:

W>Добрый день!


W>Мне надо в функцию SysAllocString(const OLECHAR *) в качестве параметра всунуть значение переменной типа char [];


W>char A[10]; к примеру,


W>как мне преобразовать тип этой переменной в OLECHAR ...


W>Заранее спасибо!

Приведи ее к BSTR. Если нет там в строке системных символов — то через апишные функции(не помню, в MSDN найдешь), если есто такие , ну к примеру 0x01 и т.д , то только через SAFEARAY.
Re: Конвертация строк
От: A_l_e_x_e_y Россия  
Дата: 21.12.04 13:51
Оценка:
А обязательно использовать только WinAPI?
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[2]: Конвертация строк
От: Whistler Россия Блог на GotDotNet.ru
Дата: 21.12.04 13:59
Оценка:
Здравствуйте, Flex2, Вы писали:

F>Здравствуйте, Whistler, Вы писали:


W>>Добрый день!


W>>Мне надо в функцию SysAllocString(const OLECHAR *) в качестве параметра всунуть значение переменной типа char [];


W>>char A[10]; к примеру,


W>>как мне преобразовать тип этой переменной в OLECHAR ...


W>>Заранее спасибо!

F>Приведи ее к BSTR. Если нет там в строке системных символов — то через апишные функции(не помню, в MSDN найдешь), если есто такие , ну к примеру 0x01 и т.д , то только через SAFEARAY.


А конкретнее, мне действительно CHAR[] в BSTR перевести надо, а я вообще не знаю как
Re[2]: Конвертация строк
От: Whistler Россия Блог на GotDotNet.ru
Дата: 21.12.04 14:35
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>А обязательно использовать только WinAPI?


мне все равно как, гдавное сконвертнуть

char [] в BSTR

а как?
Re[3]: Конвертация строк
От: VsevolodC Россия  
Дата: 21.12.04 14:45
Оценка:
Здравствуйте, Whistler, Вы писали:

W>Здравствуйте, A_l_e_x_e_y, Вы писали:


A__>>А обязательно использовать только WinAPI?


W>мне все равно как, гдавное сконвертнуть


W>char [] в BSTR


W>а как?


Удобнее пользоваться классом _bstr_t:

A _bstr_t object encapsulates the BSTR data type. The class manages resource allocation and deallocation, via function calls to SysAllocString and SysFreeString, and other BSTR APIs when appropriate. The _bstr_t class uses reference counting to avoid excessive overhead.

а у него есть конструктор:
_bstr_t( const char* s2 ) throw( _com_error );

_bstr_t( char* s2 ) Constructs a _bstr_t object by calling SysAllocString to create a new BSTR object and encapsulate it. This constructor first performs a multibyte to Unicode conversion.

Re[4]: Конвертация строк
От: A_l_e_x_e_y Россия  
Дата: 21.12.04 15:01
Оценка:
Здравствуйте, VsevolodC, Вы писали:
VC>Удобнее пользоваться классом _bstr_t:
Только что тоже хотел ответить именно так, но заглянув в comutil.h обнаружил две функции


namespace _com_util {
    // Convert char * to BSTR
    //
    BSTR __stdcall ConvertStringToBSTR(const char* pSrc) ;

    // Convert BSTR to char *
    //
    char* __stdcall ConvertBSTRToString(BSTR pSrc) ;
}


Так вот эти функции _bsrt_t и вызывает.
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[3]: char в BSTR
От: Alexander_S_U https://github.com/alexanders-code/cmdxmlinstaller
Дата: 21.12.04 15:06
Оценка:
Здравствуйте, Whistler, Вы писали:

W>Здравствуйте, A_l_e_x_e_y, Вы писали:


A__>>А обязательно использовать только WinAPI?


W>мне все равно как, гдавное сконвертнуть


W>char [] в BSTR


W>а как?


преобразовать char [] в BSTR можно вот так


char a[10];
...
//заполнили массив данными
...
//использует <comutil.h>
BSTR bstrText = _com_util::ConvertStringToBSTR(a);
// всё в BSTR наша строка


Успехов
https://github.com/alexanders-code/cmdxmlinstaller
Re: Конвертация строк
От: netdaemon  
Дата: 21.12.04 17:45
Оценка:
Здравствуйте, Whistler, Вы писали:

W>Добрый день!


W>Мне надо в функцию SysAllocString(const OLECHAR *) в качестве параметра всунуть значение переменной типа char [];


W>char A[10]; к примеру,


W>как мне преобразовать тип этой переменной в OLECHAR ...


W>Заранее спасибо!


Да работа с BSTR это Вам не тут Но есть в ATL несколько вещей которые делают этот процесс не таким мучительным.
1. Макросы преобразования. W2OLE например который делает именно то что тебе тут нужно.

Использовать так:

USES_CONVERSION;
...
LPOLESTR x = A2OLE(lpsz) и т.д.Хедер atlconv.h если не ошибаюсь.
Но с BSTR жить просто не выносимо ( по моему личному мнению ).Однако ситуацию спасает класс CComBSTR.С ним повеселее будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.