三分钟带你了解Core CLR Host是如何宿主托管的.Net Core 程式
.Net Core 宿主托管的.Net Core 程式一共分为七个步骤,非常简单,基本如下
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
1.加载CoreCLR.DLL
HMODULE ret = LoadLibraryExW("CoreCLR.dll", NULL, 0);
2.获取CoreCLR.DLL 接口GetCLRRuntimeHost
FnGetCLRRuntimeHost pfnGetCLRRuntimeHost =(FnGetCLRRuntimeHost)::GetProcAddress(coreCLRModule, "GetCLRRuntimeHost");
3.通过接口查找IID_ICLRRuntimeHost4的宿主运行时RunTimeHost
HRESULT hr = pfnGetCLRRuntimeHost(IID_ICLRRuntimeHost4, (IUnknown**)&runtimeHost);
4.设置runtimehost的标志
hr = runtimeHost->SetStartupFlags( static_cast<STARTUP_FLAGS>( STARTUP_FLAGS::STARTUP_CONCURRENT_GC |
STARTUP_FLAGS::STARTUP_SINGLE_APPDOMAIN |
STARTUP_FLAGS::STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN
) );
5.启动runtimehost
hr = runtimeHost->Start();
6.设置TpaList
const wchar_t* propertyValues[] = { trustedPlatformAssemblies, appPaths, appNiPaths, nativeDllSearchDirectories, platformResourceRoots };
7.创建Dome管理器
hr = runtimeHost->CreateAppDomainWithManager( L"Sample Host AppDomain",
appDomainFlags, NULL,
NULL,
sizeof(propertyKeys) / sizeof(wchar_t*), propertyKeys, propertyValues, &domainId);
8.执行托管程式
hr = runtimeHost->ExecuteAssembly(domainId, targetApp, argc-1, (LPCWSTR*)(argc > 1 ? &argv[1] : NULL), &exitCode);

更多精彩