虽然试图举办CLR,我不断收到这样的:
错误C2440:“功能”:无法从“常量IID”到“DWORD”转换
我的代码:
ICLRRuntimeHost *host = NULL;
HRESULT result = CorBindToRuntime(NULL, L"wks", CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost, (PVOID*)&host);
这是C,顺便说一句。 不是C ++。
编辑:当我编译这与C ++,它工作得很好。 难道不应该表现在任何一种语言一样吗?
从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);
CorBindToRuntime的最后一个参数定义为LPVOID *,不PVOID *。 也许这就是问题?
HRESULT CorBindToRuntime (
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszBuildFlavor,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] LPVOID FAR *ppv
);