2009-08-29 4 views
1

に「のconst IID」から変換することはできません、私はこれを得続ける:エラーC2440:「関数」:CLRをホストしようとしながら「DWORD」

エラーC2440:「関数」:から変換できません " DWORD '

私のコード「から' constのIID:

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

これは仕方によって、Cです。 C++ではありません。

編集:これをC++でコンパイルすると、うまく動作します。どちらの言語でも同じように動作してはいけませんか?

答えて

0

:つまり

#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); 
0

CorBindToRuntimeの最後のパラメータは、PVOID *ではなくLPVOID *として定義されています。おそらくそれは問題ですか? guiddef.hから

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

今誤差がある:「エラーC2440: 『関数』: 『のconst IID』から 『constのIID *のconst』に変換できません」私はCで上記をコンパイルする不思議な –

+0

、++、すべて正常に動作します。これはどうやってできるの? –

関連する問題