未解析的外部符号 CLRCreateInstance

Mat*_*Mut 3 c++ .net-runtime

我在 Internet 的帮助下编写了一些本机 C++ 代码,该代码加载 .NET 运行时并调用具有签名的方法:public static int MethodNameHere(String pwzArgument)来自托管程序集中的类。

但是,我似乎无法使用 Visual Studio 将代码编译为本机 DLL(64 位),因为CLRCreateInstance()似乎存在链接问题,即使我包含"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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

Han*_*ant 5

.h 文件不能解决链接问题,它只是添加它们。您链接到的 MSDN 文章笨手笨脚地记录了包含和链接提示的常用方式,“作为资源包含”毫无帮助。在 C++ 中,您必须链接mscoree.lib才能解析符号。它是 mscoree.dll 的导入库,包含在 SDK 中。

#pragma comment(lib, "mscoree.lib")最简单的方法是在 #include 之后添加。