2013-08-17 181 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:語法錯誤:缺少」 ;」在第6行的'__stdcall'之前(還有更多的行),我已經google了一下,我發現我必須包含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. 
相關問題