Erro C2440: 'Função': Não é possível converter de 'const iid' para 'dword'

StackOverflow https://stackoverflow.com/questions/1351589

  •  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?

Foi útil?

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
scroll top