Неразрешенный внешний символ CLRCreateInstance

Я написал некоторый нативный код 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;
    }
}

Любая помощь?

1 ответ

Решение

Файл.h не решает проблему линковки, он просто добавляет их. Статья MSDN, на которую вы ссылаетесь, описывает обычный способ, который включает в себя ссылки и ссылки, которые документированы: "Включен как ресурс" довольно бесполезен. В C++ вы должны ссылаться mscoree.lib чтобы получить разрешение символа. Это библиотека импорта для mscoree.dll и включена в SDK.

Самый простой способ это добавить #pragma comment(lib, "mscoree.lib") после вашего #include.

Другие вопросы по тегам