错误C2440:'function':无法从'const IID'转换为'DWORD'

时间:2009-08-29 14:34:28

标签: c clr-hosting

在尝试托管CLR时,我不断得到这个:

  

错误C2440:'function':无法从'const IID'转换为'DWORD'

我的代码:

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

顺便说一句,这是在C语言中。不是C ++。

编辑:当我用C ++编译它时,它运行得很好。这两种语言都不应该表现相同吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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);