2009-08-29 6 views
1

Tout en essayant d'accueillir le CLR, je continue à obtenir ceci:erreur C2440: « fonction »: ne peut pas convertir « const IID » à « DWORD »

erreur C2440: « fonction »: ne peut pas convertir ' const IID » à 'DWORD'

Mon code:

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

Ceci est en C, par la voie. Pas C++.

EDIT: Lorsque je compile cela avec C++, cela fonctionne très bien. Ne devrait-il pas se comporter de la même façon dans les deux langues?

Répondre

0

De 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 

En d'autres termes, en C++, ces deux sont des références, et en C, ils sont des pointeurs. Vous devez utiliser:

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

Le dernier paramètre de CorBindToRuntime est défini comme LPVOID *, pas PVOID *. Peut-être que c'est le problème?

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

Maintenant, l'erreur est: "erreur C2440: 'fonction': ne peut pas convertir 'const IID' à 'const IID * const'" –

+0

Étrangement, quand je compile ci-dessus en C++, Tout fonctionne bien. Comment cela pourrait-il être? –

Questions connexes