错误C2440:“功能”:无法从“常量IID”到“DWORD”转换(error C2440: 

2019-08-03 02:48发布

虽然试图举办CLR,我不断收到这样的:

错误C2440:“功能”:无法从“常量IID”到“DWORD”转换

我的代码:

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

这是C,顺便说一句。 不是C ++。

编辑:当我编译这与C ++,它工作得很好。 难道不应该表现在任何一种语言一样吗?

Answer 1:

从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);


Answer 2:

CorBindToRuntime的最后一个参数定义为LPVOID *,不PVOID *。 也许这就是问题?

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


文章来源: error C2440: 'function' : cannot convert from 'const IID' to 'DWORD'
标签: c clr-hosting