2013-08-17 2 views
4

У меня возникли некоторые проблемы при создании COM DLL Мой IClassFactory-реализация выглядит следующим образом:.ошибка C2143: синтаксическая ошибка: отсутствует ';' Перед «__stdcall„

include <windows.h> 
#include <ObjBase.h> 
#include "AddObj.h" 
#include "AddObjFactory.h" 

HRESULT __stdcall CAddFactory::CreateInstance(IUnknown* pUnknownOuter, 
               const IID& iid, void** ppv) 
{ 
    if (pUnknownOuter) { return CLASS_E_NOAGGREGATION; } 

    CAddObj* pObject = new CAddObj(); 
    if (pObject == NULL) 
    { 
     return E_OUTOFMEMORY; 
    } 

    return pObject->QueryInterface(iid, ppv); 
} 

HRESULT __stdcall CAddFactory::LockServer(BOOL bLock) 
{ 
    return E_NOTIMPL; 
} 

Моя проблема заключается в том, что Visual Studio всегда говорят“ошибка C2143: синтаксическая ошибка: отсутствует» ;» перед «__stdcall» в строке 6 (и еще несколько строк). Я уже googled, я понял, что я должен включить windows.h. Но это не решает мою проблему ... кто-нибудь знает, что не так с моим кодом или То, что я включать, чтобы решить эту проблему, я получаю ту же ошибку при компиляции заголовочный-файла:

#include <Windows.h> 
#include <ObjBase.h> 

class CAddFactory : public IClassFactory 
{ 
public: 
    HRESULT __stdcall QueryInterface(REFIID riid, void **ppObj); 
    ULONG __stdcall AddRef(); 
    ULONG __stdcall Release(); 

    HRESULT __stdcall CreateInstance(IUnknown* pUnknownOuter, 
            const IID& iid, void** ppv); 
    HRESULT __stdcall LockServer(BOOL bLock); 

private: 
    long m_nRefCount; 
} 

Кстати, код основан на учебник от CodeGuru

+2

* "компиляция файла заголовка" *? как странно. (и см. ответ Helix) – WhozCraig

ответ

5

. Вы должны поставить ; после каждого класса и структуры, потому что это объекты, такие как int a;, а не функции. ; отсутствует в вашем заголовке.

#include <Windows.h> 
#include <ObjBase.h> 

class CAddFactory : public IClassFactory { 
    public: 
     HRESULT __stdcall QueryInterface(REFIID riid, void **ppObj); 
     ULONG __stdcall AddRef(); 
     ULONG __stdcall Release(); 

HRESULT __stdcall CreateInstance(IUnknown* pUnknownOuter, const IID& iid, void** ppv); 
HRESULT __stdcall LockServer(BOOL bLock); 

private: 
    long m_nRefCount; 

}; //<- Master forgot Dobby.