2011-04-07 3 views
4

Мне нужно снова погрузиться в программирование на C++ COM и забыл большинство уроков, извлеченных из прошлого. (когда я думаю, что фраза «никогда снова» не использовалась по ошибке.)C++ COM: Общие ошибки

Каковы наиболее распространенные ошибки и анти-шаблоны разработки COM в C++? Я использую Borland C++ Builder, но я следую за вещами, которые применяются ко всем компиляторам на C++.

ответ

0

Я надеру мёртвые себя с первым я споткнулся снова:

Не передавать буквенные строки в функцию, которые требуют параметров BSTR. См. the remarks section here.

CComPtr<IFoo> foo; 

foo->bar("Bletch!"); // No valid BSTR prefix, so bad things will happen. 

Вместо использования ...

foo->bar(CComBSTR("Bletch!")); 
+0

Таким образом, BSTR будет протекать, если вызываемый код не станет им пользоваться (последнее очень необычно). Вы должны использовать класс-оболочку, например 'CComBSTR' или' _bstr_t'. – sharptooth

+0

@sharptooth. Спасибо, исправлено. Я думаю, что это тоже распространенная ошибка :-( – Roddy

2

Моя ошибка не читал инструкцию. Я просто попытался воспользоваться учебниками и примерами кода, найденными в Интернете. Я потратил много часов на проблемы, которые было бы легко решить, если бы я получил хорошее базовое понимание COM.

+1

Это +1. Определенно. Ты утопишь себя, если не справишься с тем, что происходит под капотом. Это печально (и доказывает, что COM - очень плохая структура), но усложняется. Убедитесь, что вы понимаете объектную модель, типы, общие интерфейсы (особенно IDispatch, если вы ее используете). –

Смежные вопросы