Наступил на грабли и не найду решения.
Объявил свойство ActiveX компонента с типом BSTR, через которое передаю ему 6 байт мак-адреса Bluetooth-устройства.
Байты на вход из источника (Labview) приходится передавать, конвертировав их в строку. Эту строку я вижу в HEX-формате — она честная и содержит верные коды.
Не смотря на то что тип BSTR декларирован как композитный и может передавать любые данные, данные приходят как Unicode. Т.е. парными байтами.
Сделал конверсию — вроде сначала заработало.
Но как только поменял значение оджного из байтов на большее чем ASCII, получил его каккое-то конвертированное значение.
Например код 0х80 становится 0х02, а код 0х85 превращается в 0х26
Вижу, что на вход из источника коды (строка байтов) поступают правильные. А в отладчике — аргумент свойства внутри AX уже преобразован чудным образом.
Каким образом можно передать эти 6 байт (unsigned char) в СОМ-компонент?
Здравствуйте, 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)