Erro C2440: 'Função': Não é possível converter de 'const iid' para 'dword'
-
20-09-2019 - |
Pergunta
Enquanto tentava hospedar o CLR, continuo recebendo isso:
Erro C2440: 'Função': Não é possível converter de 'const iid' para 'dword'
Meu código:
ICLRRuntimeHost *host = NULL;
HRESULT result = CorBindToRuntime(NULL, L"wks", CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost, (PVOID*)&host);
Isso está em C, a propósito. Não C ++.
EDITAR: Quando eu compilar isso com C ++, funciona muito bem. Não deveria se comportar o mesmo em nenhum dos idiomas?
Solução
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
Em outras palavras, em C ++, essas duas são referências e, em C, são dicas. Você precisa usar:
ICLRRuntimeHost *host = NULL;
HRESULT result = CorBindToRuntime(NULL, L"wks", &CLSID_CLRRuntimeHost,
&IID_ICLRRuntimeHost, (PVOID*)&host);
Outras dicas
O último parâmetro de CorbIndtoruntime é definido como LPVoid*, não pvoid*. Talvez esse seja o problema?
HRESULT CorBindToRuntime (
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszBuildFlavor,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] LPVOID FAR *ppv
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow