未解决的外部符号 CLRCreateInstance

3
我在网上找到一些帮助,写了一些本地C++代码,并加载了.Net运行时,调用了托管程序集中一个类的具有如下签名的方法:public static int MethodNameHere(String pwzArgument)
然而,我无法使用Visual Studio将代码编译成本地DLL(64位),因为似乎存在与CLRCreateInstance()的链接问题,即使我在.cpp源文件中包含了"MetaHost.h"
以下是整个代码:
#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个回答

5
一个.h文件不能解决链接问题,它只是添加了一些内容。你提供的MSDN文章在文件包含和链接提示方面并没有详细说明,“作为资源包含”非常不直观。在C++中,你需要链接mscoree.lib来解析符号。它是mscoree.dll的导入库, 在SDK中已经包含。
最简单的方法是在你的 #include 后添加 #pragma comment(lib, "mscoree.lib")

将“mscoree.lib”添加到链接器依赖项中,它就可以工作了!谢谢:D - MathuSum Mut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接