Создать COM DLL из неуправляемой C ++ LIB - PullRequest
2 голосов
/ 06 октября 2010

Я выполнил шаги здесь , чтобы создать COM DLL в Visual Studio 2008. Моя цель - обернуть существующий неуправляемый C ++ .lib.

Есть ли простой способ реализовать интерфейс COM для lib. Или мне просто нужно продолжать добавлять простые объекты ATL, которые по сути обертывают объекты в моей библиотеке?

Например, я добавил простой объект ATL, CMyObject, в свою COM-библиотеку, должен ли я создавать код обертки, включающий элементы функций и т. Д. В CMyObject, который, по сути, переносит поведение MyObject, содержащееся в неуправляемой библиотеке C ++?

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

Чтобы представить ваши функции COM, вам нужно выполнить два основных шага:

  • представить интерфейсы COM
  • реализовать эти интерфейсы, используя функциональность кода, который у вас уже есть

Так что да, описанный вами сценарий является типичным способом решения этой проблемы.

Использование ATL значительно упростит ситуацию.Однако вы должны позаботиться и об исключениях.Поскольку ваш код на C ++, он может выдавать исключения.COM не позволяет распространять исключения вне методов COM - если клиент не находится в C ++, он будет аварийно завершать работу, как только из вашего кода будет сгенерировано исключение.Таким образом, ваш слой-обертка должен иметь try - catch для каждого метода, напрямую вызванного из COM.

2 голосов
/ 06 октября 2010

Я думаю, что лучше всего добавить обертки, как вы описываете.Учитывая, что типы параметров для OLE во многих случаях будут отличаться от параметров C ++, например, BSTR, а не string или char *, для COM требуется некоторая упаковка.Единственная альтернатива - иметь не-COM DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...