2009-08-29 98 views
1

在嘗試舉辦CLR,我不斷收到這樣的:錯誤C2440:「功能」:不能轉換從「常量IID」到「DWORD」

錯誤C2440:「功能」:不能從轉換'常量IID」到 'DWORD'

我的代碼:

ICLRRuntimeHost *host = NULL; 
HRESULT result = CorBindToRuntime(NULL, L"wks", CLSID_CLRRuntimeHost, 
    IID_ICLRRuntimeHost, (PVOID*)&host); 

這是C,順便說一句。不是C++。

編輯:當我用C++編譯這個,它工作得很好。兩種語言的表現都不一樣嗎?

回答

0

從guiddef.h:

#ifndef _REFIID_DEFINED 
#define _REFIID_DEFINED 
#ifdef __cplusplus 
#define REFIID const IID & 
#else 
#define REFIID const IID * __MIDL_CONST 
#endif 
#endif 

#ifndef _REFCLSID_DEFINED 
#define _REFCLSID_DEFINED 
#ifdef __cplusplus 
#define REFCLSID const IID & 
#else 
#define REFCLSID const IID * __MIDL_CONST 
#endif 
#endif 

換句話說,在C++中,這兩個是引用,並且在C,它們是指針。您需要使用:

ICLRRuntimeHost *host = NULL; 
HRESULT result = CorBindToRuntime(NULL, L"wks", &CLSID_CLRRuntimeHost, 
    &IID_ICLRRuntimeHost, (PVOID*)&host); 
0

CorBindToRuntime的最後一個參數定義爲LPVOID *,而不是PVOID *。也許這就是問題所在?

HRESULT CorBindToRuntime (
     [in] LPCWSTR  pwszVersion, 
     [in] LPCWSTR  pwszBuildFlavor, 
     [in] REFCLSID rclsid, 
     [in] REFIID  riid, 
     [out] LPVOID FAR *ppv 
); 
+0

現在的錯誤是:「錯誤C2440:‘功能’:不能轉換從‘常量IID’到‘常量IID * const的’」 – 2009-08-29 15:38:56

+0

奇怪的是,當我編譯以上C++,一切正常。這怎麼可能? – 2009-08-29 21:34:42

相關問題