在尝试托管CLR时,我不断得到这个:
错误C2440:'function':无法从'const IID'转换为'DWORD'
我的代码:
ICLRRuntimeHost *host = NULL;
HRESULT result = CorBindToRuntime(NULL, L"wks", CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost, (PVOID*)&host);
顺便说一句,这是在C语言中。不是C ++。
编辑:当我用C ++编译它时,它运行得很好。这两种语言都不应该表现相同吗?
答案 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);