2016-07-29 13 views
1

.NET Runtimeを読み込み、マネージアセンブリ内のクラスのpublic static int MethodNameHere(String pwzArgument)というシグネチャを持つメソッドを呼び出すインターネットの助けを借りて、ネイティブC++コードを書きました。未解決の外部シンボルCLRCreateInstance

しかし、CLRCreateInstance()とのリンクの問題があると思われるため、Visual Studioを使用してコードをコンパイルすることはできません。"MetaHost.h"を.cppソースに含めていますファイル。

#include "MetaHost.h" 

extern "C" { 
    __declspec(dllexport) DWORD __stdcall CallManagedMethod(LPCWSTR managedDLLPath, LPCWSTR classPathInAssembly, LPCWSTR methodName, LPCWSTR parameter) { 
     // Bind to the CLR runtime.. 
     ICLRMetaHost* pMetaHost = nullptr; 
     CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*) &pMetaHost); 

     ICLRRuntimeInfo* pRuntimeInfo = nullptr; 
     pMetaHost->GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*) &pRuntimeInfo); 

     ICLRRuntimeHost* pClrRuntimeHost = nullptr; 
     pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*) &pClrRuntimeHost); 

     pClrRuntimeHost->Start(); 

     // Okay, the CLR is up and running in this (previously native) process. 
     // Now call a method on our managed C# class library. 
     DWORD dwRet = 0; 
     pClrRuntimeHost->ExecuteInDefaultAppDomain(managedDLLPath, classPathInAssembly, methodName, parameter, &dwRet); 

     // Don't forget to clean up. 
     pClrRuntimeHost->Release(); 

     pRuntimeInfo->Release(); 
     pMetaHost->Release(); 
     return dwRet; 
    } 
} 

すべてのヘルプ:ここ

は、全体のコードはありますか?

答えて

1

.hファイルではリンクの問題は解決されず、単に追加されます。リンクしたMSDNの記事は、ヒントのインクルードとリンクの一般的なやり方を文書化しています。「リソースとして含まれています」は、あまり役に立ちません。 C++では、シンボルを解決するためにmscoree.libにリンクする必要があります。 mscoree.dllのインポートライブラリであり、SDKに含まれています。

#includeの後ろに#pragma comment(lib, "mscoree.lib")を追加するのが最も簡単な方法です。

+0

"mscoree.lib"をリンカの依存関係に追加しました。ありがとう –

関連する問題