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.
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
Ah, ein zusätzlicher Fehler, den ich nicht bemerkt habe, der erste Fehler ist jetzt Fehler C2039: 'IDispatchImpl' ist kein Mitglied von 'ATL' – DougW
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