2016-12-08 44 views
0

プロジェクトをVS2008からVS2013にアップグレードしています。私は(他の多くには、次のと一緒に、これは最初の問題である)次のエラーが発生した:ヘッダファイルAimConfiguration.hでエラーC2504: 'IDispatchImpl':基底クラスが未定義

1>d:\express\ver38\ide\source\aimauto\AimConfiguration.h(12): error C2504: 'IDispatchImpl' : base class undefined 
1>d:\express\ver38\ide\source\aimauto\AimConfiguration.h(12): error C2143: syntax error : missing ',' before '<' 
1>d:\express\ver38\ide\source\aimauto\AimConfiguration.h(32): error C3646: 'COM_INTERFACE_ENTRY' : unknown override specifier 
1>d:\express\ver38\ide\source\aimauto\AimConfiguration.h(32): error C2259: 'IDispatch' : cannot instantiate abstract class 
1>   due to following members: 
1>   'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract 
1>   C:\Program Files (x86)\Windows Kits\8.1\Include\um\unknwnbase.h(114) : see declaration of 'IUnknown::QueryInterface' 
1>   'ULONG IUnknown::AddRef(void)' : is abstract 
1>   C:\Program Files (x86)\Windows Kits\8.1\Include\um\unknwnbase.h(118) : see declaration of 'IUnknown::AddRef' 
1>   'ULONG IUnknown::Release(void)' : is abstract 
1>   C:\Program Files (x86)\Windows Kits\8.1\Include\um\unknwnbase.h(120) : see declaration of 'IUnknown::Release' 
1>   'HRESULT IDispatch::GetTypeInfoCount(UINT *)' : is abstract 
1>   c:\program files (x86)\windows kits\8.1\include\um\oaidl.h(2187) : see declaration of 'IDispatch::GetTypeInfoCount' 
1>   'HRESULT IDispatch::GetTypeInfo(UINT,LCID,ITypeInfo **)' : is abstract 
1>   c:\program files (x86)\windows kits\8.1\include\um\oaidl.h(2190) : see declaration of 'IDispatch::GetTypeInfo' 
1>   'HRESULT IDispatch::GetIDsOfNames(const IID &,LPOLESTR *,UINT,LCID,DISPID *)' : is abstract 
1>   c:\program files (x86)\windows kits\8.1\include\um\oaidl.h(2195) : see declaration of 'IDispatch::GetIDsOfNames' 
1>   'HRESULT IDispatch::Invoke(DISPID,const IID &,LCID,WORD,DISPPARAMS *,VARIANT *,EXCEPINFO *,UINT *)' : is abstract 
1>   c:\program files (x86)\windows kits\8.1\include\um\oaidl.h(2202) : see declaration of 'IDispatch::Invoke' 

コードは次のとおりです。

class aimConfiguration : 
    public IDispatchImpl<IaimConfiguration, &IID_IaimConfiguration, &LIBID_aimAutomationLib,AIM_MAJOR_VER,AIM_MINOR_VER>, 
    public ISupportErrorInfo, 
    public CComObjectRoot, 
    public CComCoClass<aimConfiguration,&CLSID_aimConfiguration> 

atlcom.hですcppファイルで宣言されています:

#include "stdafx.h" 
#include "atlcom.h" 
#include "aimAutomation.h" 
#include "AimStrings.h" 
#include "AimConfiguration.h" 

検索時に類似の問題への参照が見つかりましたが、解決策が見つかりませんでした。助けてくれてありがとう。

答えて

0

ほとんどのATLのものはATL名前空間にあります。私は、生成されたstdafx.hが_ATL_NO_AUTOMATIC_NAMESPACEを定義すると考えているので、その#defineを削除するか、using namespace ATL;(.cppファイルの方が好ましい)を使用するか、またはATL::(ヘッダファイルの方が好ましい)

+0

私は何が起こっているか分かりません。その行はstdafx.hにはなく、確かにstdafx.hの内容は以下の通りです:#include その後に名前空間ATLを使用します。私も公共ATL :: IDispatchImpl 、 \t公共ISupportErrorInfo、 は\t公共CComObjectRoot、 公共CComCoClass と私はまだ取得するaimconfiguration.hラインを変更しました同じエラー。 – DougW

+0

ああ、私が気付かなかった追加のエラー、最初のエラーはエラーC2039です: 'IDispatchImpl'は 'ATL'のメンバーではありません – DougW

+0

何が間違っているのか分かりません。複数の.cppファイルにaimconfiguration.hを含める場合は、 '#include '行をstdafx.hに移動してください(そして、引用符の代わりに矢印を使用してください: '' 'atlcom.h")。 – user1610015

関連する問題