2016-12-08 5 views
0

Ich aktualisiere ein Projekt von VS2008 zu VS2013. Ich habe folgende Fehler aufgetreten (zusammen mit vielen anderen folgen, aber dies ist die erste Ausgabe):Fehler C2504: 'IDispatchImpl': Basisklasse undefiniert

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' 

Der Code in der Header-Datei AimConfiguration.h ist:

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 ist in der CPP-Datei deklariert:

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

ich Verweise auf ähnliche Probleme gefunden haben, bei der Suche, aber ich habe keine Lösungen gefunden. Danke für jede Hilfe.

Antwort

0

Die meisten ATL-Dateien befinden sich im ATL-Namespace. Ich glaube, das generierte stdafx.h definiert _ATL_NO_AUTOMATIC_NAMESPACE, also müssen Sie entweder das #define entfernen oder using namespace ATL; (bevorzugt für .cpp-Dateien) verwenden oder Schnittstellen und Zeug explizit qualifizieren mit ATL:: (bevorzugt für Header-Dateien).

+0

Ich bin mir nicht sicher, was passiert. Diese Zeile befindet sich nicht in der stdafx.h, und der Inhalt von stdafx.h ist jetzt natürlich: #include gefolgt von der Verwendung von Namespace ATL; Ich änderte auch die aimconfiguration.h Linie öffentliche ATL sein :: IDispatchImpl , \t öffentlichen ISupportErrorInfo, \t öffentlichen CComObjectRoot, öffentliche CComCoClass und ich bekomme immer noch die gleicher Fehler. – DougW

+0

Ah, ein zusätzlicher Fehler, den ich nicht bemerkt habe, der erste Fehler ist jetzt Fehler C2039: 'IDispatchImpl' ist kein Mitglied von 'ATL' – DougW

+0

Nicht sicher, was dann falsch ist. Versuchen Sie, die '#include '-Zeile in stdafx.h zu verschieben (und verwenden Sie Pfeile anstelle von Anführungszeichen:' 'not' "atlcom.h" '), falls Sie aimconfiguration.h in mehr als einer .cpp-Datei einschließen. – user1610015

Verwandte Themen