Неразрешенный внешний символ 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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]