powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как конвертнуть BYTE * в _bstr_t
5 сообщений из 5, страница 1 из 1
Как конвертнуть BYTE * в _bstr_t
    #32574280
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, подскажите как мне конвертнуть 'BYTE *' в 'LPCSTR'. На самом деле
задача шире. У меня есть компонента которая читает данные из порта,
ясное дело там может прийти строка любой длинны. Необходимо эти данные
данные передать приложению на VFP.

Метод в VFP которому передаются параметры описан так:
PROCEDURE EVReciveData(cdata as String) as Variant
RETURN cdata

В VС вижу что мне нужно передавать:
m_Tmyclass->EVReciveData(_bstr_t сdata);
Буфер порта , объявлен как :
BYTE *InStr = (BYTE *)malloc(inQ);
inQ - реальное количество байт котрое мне пришло в порт, что вообще-то не важно, важно-то что оно не константа. Причем поток из порта может содержать байты от 0x00 до 0x1F.
Как мне преобразовать полученные данные из порта к виду необходимомоу для передачи ?

Счас делаю так:
CComBSTR _bstr_data;
_bstr_data.AppendBytes(char* InStr,inQ);
m_Tmyclass->EVReciveData(_bstr_t(_bstr_data));
Приложение получает совсем не то что должно, строку мусора постоянной длинны. Помогите пожалуйста.
...
Рейтинг: 0 / 0
Как конвертнуть BYTE * в _bstr_t
    #32574569
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так

Память выдели
BSTR bstr = SysAllocStringLen( NULL, inQ * sizeof( wchar_t ) );

Конвертируй в буфер
MultiByteToWideChar( ...., InStr, ... , bstr)

_bstr_t _bstr_data( bstr, false );
...
Рейтинг: 0 / 0
Как конвертнуть BYTE * в _bstr_t
    #32574704
Basilisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость_xxx
Причем поток из порта может содержать байты от 0x00 до 0x1F.


От 0x00 надо избавиться ?
Иначе пойдут за конец строки.
...
Рейтинг: 0 / 0
Как конвертнуть BYTE * в _bstr_t
    #32577514
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да , видимо придется избавляться от 0x00, MultiByteToWideChar( ...., InStr, ... , bstr) напрочь отказывается их конвертить правильно, вместо
0x00 в проге получаю вместо 0x00 - 0xE1. Все остальные байты , а я знаю что
у меня из порта прет, обезображены до неузноваемости. А в случае прихода 1 байта сихронизации 0x00 вооще ничего не передает.
Подскажите мне, а нельзяли засунуть char * в VARIANT ? Может там можно
как-то без преобразования ? Или через SafeArray замутить как-то можно ?
...
Рейтинг: 0 / 0
Как конвертнуть BYTE * в _bstr_t
    #32578032
Basilisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость_xxx
Да , видимо придется избавляться от 0x00, MultiByteToWideChar( ...., InStr, ... , bstr) напрочь отказывается их конвертить правильно, вместо
0x00 в проге получаю вместо 0x00 - 0xE1. Все остальные байты , а я знаю что
у меня из порта прет, обезображены до неузноваемости. А в случае прихода 1 байта сихронизации 0x00 вооще ничего не передает.
Подскажите мне, а нельзяли засунуть char * в VARIANT ? Может там можно
как-то без преобразования ? Или через SafeArray замутить как-то можно ?

Через SafeArray замутить конечно можно, но как вы потом в FoxPro с ним будете работать.
Я не спец по FoxPro но сдается мне что это вызовет определенные проблемы.
ИМХО Может проще преобразовать получаемые данные так чтобы они были похожи на строку ?
Код: plaintext
1.
2.
3.
4.
5.
BYTE *InStr = (BYTE *)malloc(inQ);    
.......
for (int i= 0 ; i<inQ; i++) InStr[i] +=  0x20; // все символы не меньше пробела 
CComBSTR _bstr_data(inQ, (LPCSTR)inStr);
m_Tmyclass->EVReciveData(_bstr_t(_bstr_data));

И можно использовать в FoxPro, зная что все байты +0x20
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как конвертнуть BYTE * в _bstr_t
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]