2011-12-14 35 views
0

我試圖按照Simple COM Tutorial的步驟,這對我來說看起來不錯而且合乎邏輯。我通常會迴避使用巫師,但似乎認爲這是做COM的最好方式。無法讓簡單的COM項目工作:在哪裏以及如何實施?

總結

  1. 與嚮導
  2. 使用添加類對話框創建(在本例中SimpleChatServer)的ATL簡單對象
  3. 導航到類視圖中創建一個ATL項目,右鍵單擊該界面爲對象,添加方法(CallMe在本例中)
  4. 本教程給出了一個使用的方法體
  5. 編譯

我的編輯,但失敗了,因爲

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

有事了毛病精靈?我希望VS自動聲明CSimpleChatServer中的CallMe方法,併爲我提供一個方法存根來添加實現,但實際上它沒有。 (教程的另一個區別是類瀏覽器沒有顯示類CSimpleChatServer,你可能會認爲它會這樣,可能是因爲我禁用了intellisense?希望是一個單獨的問題)。

那麼,該怎麼做,我在哪裏以及如何定義和聲明具有該功能的實際C++方法?

回答

1

所以 - 這是關於智能感知。由於需要編譯boost :: geometry as recommended in the boost docs,因此我通過重命名feacp.dll來禁用智能感知。這導致COM添加類對話框以靜默方式無法將存根方法添加到我的.h.cpp文件。

C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages\feacp.dll它的原始名稱回來似乎解決這個問題。

2

ATL嚮導通常會在頭文件中聲明方法(使用STDMETHOD(BLah)(...)),提供存根實現(使用STDMETHODIMP CFoo::Blah(...))並將該聲明添加到IDL文件。

但是,我記得當您手動修改頭文件時,它會變得混淆,只會將聲明添加到IDL中,而不會添加到.h和和.cpp文件中。如果我是你,我會再次從頭開始(並且除非你有充分理由不要,否則應避免使用COM)。

當你獲得經驗時,你將擺脫嚮導來生成方法(對於類,它可能太複雜了)。

+0

謝謝,這有助於瞭解方法存根應該在那裏。所以巫師被打破了 - 我現在找到了一個解決方案。 – 2011-12-15 12:18:28

相關問題