Не получается заставить работать простой COM-проект: куда и как поместить реализацию? - PullRequest
0 голосов
/ 14 декабря 2011

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

Подводя итог

  1. Создание проекта ATL с помощью мастера
  2. Используйте диалог Add Class для создания простого объекта ATL (SimpleChatServer в примере)
  3. Перейдите в ClassView, щелкните правой кнопкой мыши интерфейс для объекта, добавьте метод (CallMe в примере)
  4. В учебнике дается тело метода для использования
  5. Compile

Моя компиляция, однако, не удалась, потому что

error C2509: 'CallMe' : member function not declared in 'CSimpleChatServer' 

Что-то пошло не так с волшебником? Я ожидал, что VS автоматически объявит метод CallMe в CSimpleChatServer и предоставит мне заглушку метода, чтобы добавить реализацию, чего не было.

(Другое отличие от учебника в том, что браузер классов не показывает класс CSimpleChatServer, который, как вы думаете, будет. Возможно, это потому, что я отключил intellisense? Надеюсь, это отдельная проблема).

Итак, что делать, где и как определить и объявить фактический метод C ++ с функциональностью?

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Мастер ATL обычно объявляет метод в заголовке (с STDMETHOD(BLah)(...)), обеспечивает реализацию заглушки (с STDMETHODIMP CFoo::Blah(...)) и добавляет объявление в файл IDL.

Однако я напоминаю, что когда вы вручную изменяете файл заголовка, он запутывается и добавляет объявление только в IDL, но не в файл .h и .cpp. На твоем месте я бы сделал это снова с нуля (и избегал COM, если у тебя нет веских причин не делать этого).

Когда вы приобретете опыт, вы избавитесь от мастера создания методов (однако для классов он, вероятно, слишком сложен).

1 голос
/ 15 декабря 2011

Итак - это было связано с intellisense.Я отключил intellisense, переименовав feacp.dll из-за необходимости компилировать boost :: geometry , как рекомендовано в документах boost .Это привело к тому, что диалоговое окно добавления классов COM молча не смогло добавить методы-заглушки в мои .h и .cpp файлы.

Возвращение C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages\feacp.dll его исходного имени, похоже, исправило это.

...