Итак, я пытаюсь загрузить среду выполнения .NET 4 и запустить собственную C # DLL. Метод Start () выдает ошибку HRESULT = 0x1. Если я закомментирую стартовый код, DLL-библиотека C # загружается и выполняется, а затем метод Stop () выдает ошибку HRESULT = 0x8000ffff. Я искал несколько часов, и весь код выглядит так, как показано ниже (я упустил всю свою отладку / обработку ошибок). Большое спасибо за любые советы заранее! =) * * Тысяча одна
void DotNetLoad()
{
ICLRRuntimeHost *pClrHost = NULL;
ICLRMetaHost *lpMetaHost = NULL;
MessageBox(0, L"Creating CLR instance.", L"Bootstrap Message", 0);
HRESULT hr = CLRCreateInstance(
CLSID_CLRMetaHost,
IID_PPV_ARGS(&lpMetaHost));
ICLRRuntimeInfo *lpRuntimeInfo = NULL;
hr = lpMetaHost->GetRuntime(L"v4.0.30319",
IID_PPV_ARGS(&lpRuntimeInfo));
hr = lpRuntimeInfo->GetInterface(
CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost,
(LPVOID *)&pClrHost);
hr = pClrHost->Start();
DWORD dwRet = 0;
hr = pClrHost->ExecuteInDefaultAppDomain(
pwzTargetDll,
pwzNamespaceClass, pwzFunction, L"pwzArgument", &dwRet);
hr = pClrHost->Stop();
hr = pClrHost->Release();
}
Я немного понимаю, что такое разъединение инициализации, вызова .NET и deinit, но что вы имеете в виду при запуске и завершении работы приложения? Прямо сейчас у меня DotNetLoad вызывается из метода DLL, который внедряется в удаленный процесс. В основном:
extern "C" __Declspec(dllexport) void Initialize()
{
DotNetLoad(params); //ex.
}