2009-08-29 2 views
1

При попытке провести CLR, я получаю это:ошибка C2440: «функция»: не удается преобразовать из «сопзЬ IID» до «DWORD»

ошибка C2440: «функция»: не удается преобразовать из ' Const IID»до '' DWord

Мой код:

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

Это в C, кстати. Не C++.

EDIT: Когда я скомпилирую это с помощью 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“» –

+0

Как ни странно, когда я компилировать выше в C++, все работает нормально. Как это могло произойти? –

Смежные вопросы