|
|
|
Как конвертнуть BYTE * в _bstr_t
|
|||
|---|---|---|---|
|
#18+
Господа, подскажите как мне конвертнуть '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)); Приложение получает совсем не то что должно, строку мусора постоянной длинны. Помогите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2004, 16:35 |
|
||
|
Как конвертнуть BYTE * в _bstr_t
|
|||
|---|---|---|---|
|
#18+
Попробуй так Память выдели BSTR bstr = SysAllocStringLen( NULL, inQ * sizeof( wchar_t ) ); Конвертируй в буфер MultiByteToWideChar( ...., InStr, ... , bstr) _bstr_t _bstr_data( bstr, false ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2004, 19:28 |
|
||
|
Как конвертнуть BYTE * в _bstr_t
|
|||
|---|---|---|---|
|
#18+
Гость_xxx Причем поток из порта может содержать байты от 0x00 до 0x1F. От 0x00 надо избавиться ? Иначе пойдут за конец строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2004, 22:50 |
|
||
|
Как конвертнуть BYTE * в _bstr_t
|
|||
|---|---|---|---|
|
#18+
Да , видимо придется избавляться от 0x00, MultiByteToWideChar( ...., InStr, ... , bstr) напрочь отказывается их конвертить правильно, вместо 0x00 в проге получаю вместо 0x00 - 0xE1. Все остальные байты , а я знаю что у меня из порта прет, обезображены до неузноваемости. А в случае прихода 1 байта сихронизации 0x00 вооще ничего не передает. Подскажите мне, а нельзяли засунуть char * в VARIANT ? Может там можно как-то без преобразования ? Или через SafeArray замутить как-то можно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2004, 14:10 |
|
||
|
Как конвертнуть BYTE * в _bstr_t
|
|||
|---|---|---|---|
|
#18+
Гость_xxx Да , видимо придется избавляться от 0x00, MultiByteToWideChar( ...., InStr, ... , bstr) напрочь отказывается их конвертить правильно, вместо 0x00 в проге получаю вместо 0x00 - 0xE1. Все остальные байты , а я знаю что у меня из порта прет, обезображены до неузноваемости. А в случае прихода 1 байта сихронизации 0x00 вооще ничего не передает. Подскажите мне, а нельзяли засунуть char * в VARIANT ? Может там можно как-то без преобразования ? Или через SafeArray замутить как-то можно ? Через SafeArray замутить конечно можно, но как вы потом в FoxPro с ним будете работать. Я не спец по FoxPro но сдается мне что это вызовет определенные проблемы. ИМХО Может проще преобразовать получаемые данные так чтобы они были похожи на строку ? Код: plaintext 1. 2. 3. 4. 5. И можно использовать в FoxPro, зная что все байты +0x20 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2004, 16:59 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=441&tid=2034734]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 352ms |

| 0 / 0 |
