CLR(COM伺服器)
CLR作為一個COM伺服器實現在MSCorWks.dll檔案中。安裝.NET Framework時,表示 CLR的COM伺服器被註冊到Windows的註冊表裡。
MSCorEE.dll(墊片)
MSCorEE.dll的職責是判 斷建立何種版本的CLR。 非託管應用程式宿主調用MSCorEE.dll(shim)中CorBindToRuntimeEx函數或者另一個 相似的函數來建立CLR COM的執行個體。
一台機器可以安裝多個版本的CLR,但在機器中只 有一個版本的MSCorEE.dll檔案。
以上兩者之間的關係如下代碼所示(c++): MSCorEE.dll(墊片)---->CLR(COM伺服器)
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <Windows.h>#include <MSCorEE.h>#include <stdio.h>#pragma comment(lib,"mscoree.lib")int main(int argc, CHAR* argv[]){ ICLRRuntimeHost *pClrHost; //調用<MSCorEE.h>中的CorBindToRuntimeEx()產生COM伺服器 HRESULT hr= CorBindToRuntimeEx(NULL, NULL, NULL, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&pClrHost); //啟動clr pClrHost->Start(); //............................其他動作 //終止clr pClrHost->Stop(); getchar(); return 0;}
應用程式定義域(AppDomain)
一個應用程式定義域是一組程式集的一個容器。應用 程式域的全部目的就是提供隔離性。
上圖為一個單獨的Windows進程,該進程中運行著一個CLR COM伺服器。該CLR中每個應用程式定義域都有自己的 載入器堆。(系統域,共用域,預設域#1,其他域#2)
一些特殊的程式集如MSCorLib.dll,它需要被 所有的應用程式定義域共用,那麼他就以一種對應用程式定義域保持中立的方式被載入,由CLR維護一個特殊的載入器 堆。