Процесс, упомянутый Anton & Alvar Корректен, если это все еще не работающий затем может быть две вещи
1>, загруженный файл может быть поврежден.
2> у Вас нет разрешения файла в том каталоге.
Еще одна вещь проверка JDK установлен в Вашей системе или нет?
Как подсказывают приведенные выше комментарии, существует набор COM API для размещения CLR , и вы должны иметь возможность вызывать эти COM API из C и C ++.
В качестве примера ниже приведен небольшой фрагмент (непроверенного) кода C, который показывает, как запустить среду CLR и выполнить статический метод класса в управляемой сборке (которая принимает строку в качестве аргумента и возвращает целое число). Ключевым отличием этого кода от его аналога на C ++ является определение COBJMACROS
и использование макросов
(например, ICLRRuntimeHost_Start
) для вызова COM-интерфейса CLR-хостинга. (Обратите внимание, что COBJMACROS
должен быть определен до #include
'ing mscoree. h
, чтобы убедиться, что эти служебные макросы определены.)
#include <windows.h>
#define COBJMACROS
#include <mscoree.h>
int main(int argc, char **argv)
{
HRESULT status;
ICLRRuntimeHost *Host;
BOOL Started;
DWORD Result;
Host = NULL;
Started = FALSE;
status = CorBindToRuntimeEx(
NULL,
NULL,
0,
&CLSID_CLRRuntimeHost,
&IID_ICLRRuntimeHost,
(PVOID *)&Host
);
if (FAILED(status)) {
goto cleanup;
}
status = ICLRRuntimeHost_Start(Host);
if (FAILED(status)) {
goto cleanup;
}
Started = TRUE;
status = ICLRRuntimeHost_ExecuteInDefaultAppDomain(
Host,
L"c:\\path\\to\\assembly.dll",
L"MyNamespace.MyClass",
L"MyMethod",
L"some string argument to MyMethod",
&Result
);
if (FAILED(status)) {
goto cleanup;
}
// inspect Result
// ...
cleanup:
if (Started) {
ICLRRuntimeHost_Stop(Host);
}
if (Host != NULL) {
ICLRRuntimeHost_Release(Host);
}
return SUCCEEDED(status) ? 0 : 1;
}
Этот образец должен работать с .NET 2.0+, хотя похоже, что .NET 4.0 (еще не выпущенный) отказался от некоторых из этих API в пользу новый набор API-интерфейсов для размещения среды CLR . (И если вам это нужно для работы с .NET 1.x, вам нужно использовать ICorRuntimeHost вместо ICLRRuntimeHost.)