오류 C2440 : 'function': 'const iid'에서 'dword'로 변환 할 수 없습니다.
-
20-09-2019 - |
문제
CLR을 호스팅하려고하는 동안 계속해서 이것을 얻습니다.
오류 C2440 : 'function': 'const 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의 마지막 매개 변수는 pvoid*가 아닌 lpvoid*로 정의됩니다. 아마도 그게 문제일까요?
HRESULT CorBindToRuntime (
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszBuildFlavor,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] LPVOID FAR *ppv
);
제휴하지 않습니다 StackOverflow