Как передать в ActiveX компонент цепочку байтов (MAC-adress)?
От: anpis Россия  
Дата: 10.01.14 05:40
Оценка:
Наступил на грабли и не найду решения.
Объявил свойство ActiveX компонента с типом BSTR, через которое передаю ему 6 байт мак-адреса Bluetooth-устройства.
Байты на вход из источника (Labview) приходится передавать, конвертировав их в строку. Эту строку я вижу в HEX-формате — она честная и содержит верные коды.
Не смотря на то что тип BSTR декларирован как композитный и может передавать любые данные, данные приходят как Unicode. Т.е. парными байтами.
Сделал конверсию — вроде сначала заработало.

Но как только поменял значение оджного из байтов на большее чем ASCII, получил его каккое-то конвертированное значение.
Например код 0х80 становится 0х02, а код 0х85 превращается в 0х26
Вижу, что на вход из источника коды (строка байтов) поступают правильные. А в отладчике — аргумент свойства внутри AX уже преобразован чудным образом.

Каким образом можно передать эти 6 байт (unsigned char) в СОМ-компонент?
Re: Как передать в ActiveX компонент цепочку байтов (MAC-adress)?
От: bnk СССР http://unmanagedvisio.com/
Дата: 10.01.14 07:55
Оценка:
Здравствуйте, anpis, Вы писали:

A>Каким образом можно передать эти 6 байт (unsigned char) в СОМ-компонент?


Можно преобразовать в сроку и передать.
Т.е. передавай не 6 байт, а строковое представление этого MAC-адреса, т.е. то что ты видишь в настройках адаптера например "11:22:33:44:55:66" (шестнадцатеричное представление).
Преобразовать байты в строку и обратно можно например через sprintf/scanf: How do you convert a MAC address (in an array) to string in C?

Еще обрати внимение, что в BSTR надо писать именно BSTR, а не массив символов.
Почитать про BSTR как параметр в COM можно например здесь, а про то, что такое BSTR — здесь например (или в MSDN)
Re: Как передать в ActiveX компонент цепочку байтов (MAC-adress)?
От: rus blood Россия  
Дата: 10.01.14 08:27
Оценка: 7 (1)
Здравствуйте, anpis, Вы писали:

A>Каким образом можно передать эти 6 байт (unsigned char) в СОМ-компонент?


SysAllocStringByteLen.
Создаете буфер в 6 байт, кладете туда свои данные.
На стороне компоненты читаете 6 байт по адресу, полученному в параметре.
Никаких конверсий делать не надо.
Имею скафандр — готов путешествовать!
Re: Как передать в ActiveX компонент цепочку байтов (MAC-adress)?
От: aloch Россия  
Дата: 10.01.14 20:58
Оценка:
Здравствуйте, anpis, Вы писали:

Не стоит хранить в строке то, что строкой изначально не является.

Для _БЫСТРОЙ_ передачи 6 байтов в COMпонент можно использовать, например, VARIANT-совместимый тип VT_I4 (8-ми битное целое) или VT_UI4, использовав в нем только 6 байтов.

Если скорость не важна, то можно использовать строку, но хранить в ней именно символьное представление MAC-адреса в виде 6-ти октетов "XX-XX-XX-XX-XX", выполняя соответствующие преобразования чисел в строку и обратно.


 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.