Ну, это возможно, но не маленький объем работы. Как правило, проще создать домен приложения и настроить конфигурацию из управляемого мира, а затем создать небольшой «громоздкий» слой в управляемом коде, чтобы обернуть его для неуправляемых клиентов. Но поскольку это не то, о чем вы просили, вот как вы можете достичь своей цели:
Сначала вам нужно будет импортировать mscorelib:
#include <mscoree.h>
#import <mscorlib.tlb> raw_interfaces_only no_smart_pointers high_property_prefixes("_get","_put","_putref")
Затем привязать к среде выполнения:
ICorRuntimeHost runtimeHost;
hr = CorBindToRuntimeEx(
NULL, //Retrieve latest version by default
L"wks", //Request a WorkStation build of the CLR
STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN | STARTUP_CONCURRENT_GC,
CLSID_CorRuntimeHost,
IID_ICorRuntimeHost,
(void**)&runtimeHost
);
Теперь запустите CLR и создайте экземпляр AppDomainSetup.
hr = runtimeHost->Start();
IAppDomainSetup pSetup;
hr = runtimeHost->CreateDomainSetup(&pSetup);
Теперь введите соответствующую информацию о настройке:
hr = pSetup->put_ApplicationBase(_bstr_t(thisFile));
hr = pSetup->put_ConfigurationFile(_bstr_t(configFile));
Окончательно создайте домен:
hr = __gRuntimeHost->CreateDomainEx(L"ISAPI.Net", pSetup, NULL, &pDomain);
Теперь вы можете дополнительно создать экземпляр объекта и вызвать методы:
hr = pDomain->CreateInstanceFrom(_bstr_t(assemblyFile), _bstr_t("Namespace.ClassName"), &pObjectHandle);
VARIANT vtUnwrapped;
hr = spObjectHandle->Unwrap(&vtUnwrapped);
IDispatch pDisp = vtUnwrapped.pdispVal;
DISPID dispid;
DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
hr = pDisp->GetIDsOfNames (
IID_NULL,
szMemberName,
1,
LOCALE_SYSTEM_DEFAULT,
&dispid
);
hr = pDisp->Invoke (
dispid,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&dispparamsNoArgs,
NULL,
NULL,
NULL
);
Очевидно, что приведенные выше фрагменты кода являются неполными; однако, если ваш адепт достаточно в C ++ COM, вышеприведенное должно предоставить вам достаточно информации, чтобы разобраться с этим. Вы должны отметить, что это «старые» (1.x) хостинговые интерфейсы, которые, как я могу подтвердить, продолжают работать через 3.5, я понятия не имею, как / если они работают на 4.0. Начиная с .Net 2.0 были представлены новые интерфейсы хостинга . Мне никогда не требовалось ничего, кроме версий 1.x, поэтому я никогда не удосужился обновить какой-либо хостинг-код.
см. Также: Обзор хостинга