未解析的外部符号CLRCreateInstance

Unresolved external symbol CLRCreateInstance

本文关键字:符号 CLRCreateInstance 外部      更新时间:2023-10-16

我在Internet的帮助下编写了一些本机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;
    }
}

有什么帮助吗?

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

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