ошибка C2440: «функция»: невозможно преобразовать из «const IID» в «DWORD»

При попытке разместить CLR я продолжаю получать это:

ошибка C2440: «функция»: невозможно преобразовать из «const IID» в «DWORD»

Мой код:

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

Это, кстати, на Си. Не С++.

EDIT: Когда я компилирую это с помощью C++, все работает отлично. Разве он не должен вести себя одинаково на любом языке?


person David Brown    schedule 29.08.2009    source источник


Ответы (2)


Из 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);
person MSN    schedule 30.08.2009

Последний параметр CorBindToRuntime определяется как LPVOID*, а не PVOID*. Может в этом проблема?

HRESULT CorBindToRuntime (
        [in]  LPCWSTR     pwszVersion, 
        [in]  LPCWSTR     pwszBuildFlavor, 
        [in]  REFCLSID    rclsid, 
        [in]  REFIID      riid, 
        [out] LPVOID FAR  *ppv
);
person RED SOFT ADAIR    schedule 29.08.2009
comment
Теперь ошибка: ошибка C2440: «функция»: невозможно преобразовать из «const IID» в «const IID * const» - person David Brown; 29.08.2009
comment
Как ни странно, когда я компилирую это на C++, все работает нормально. Как это могло произойти? - person David Brown; 30.08.2009