溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

.NET組件中RuntimeVersion的作用是什么

發(fā)布時(shí)間:2021-06-25 14:29:39 來源:億速云 閱讀:361 作者:Leah 欄目:編程語言

.NET組件中RuntimeVersion的作用是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

使用過COM來訪問.NET組件的朋友們應(yīng)該都會(huì)注意到在對(duì)應(yīng)注冊(cè)表中有一個(gè)RuntimeVersion的鍵值:

.NET組件中RuntimeVersion的作用是什么

這個(gè)RuntimeVersion的命名很容易讓人誤認(rèn)為RuntimeVersion是用來指定該.NET組件所應(yīng)該運(yùn)行的CLR的版本號(hào)。實(shí)際上,這個(gè)鍵值的意思和字面上不是特別一致。如果我們考慮一個(gè)情況:首先,進(jìn)程中先創(chuàng)建一個(gè).NET類型的實(shí)例,RuntimeVersion標(biāo)記為1.1,然后再創(chuàng)建一個(gè).NET類型的實(shí)例,其RuntimeVersion標(biāo)記為v2.0,那么到底會(huì)加載那些CLR版本呢?其實(shí),在目前的.NET版本(Silverlight除外)中,因?yàn)闊o法支持在同一個(gè)進(jìn)程中加載多個(gè)不同版本的CLR,因此無法支持真正的按照RuntimeVersion來加載不同的CLR版本。實(shí)際上,CLR總是加載***的CLR版本(嚴(yán)格來說其實(shí)是mscoree.dll來加載)。因此,在之前的情況下,如果機(jī)器上面安裝了1.1和2.0,實(shí)際上進(jìn)程只加載了2.0的CLR,而沒有加載1.1。如果機(jī)器上面只有1.1的話,***個(gè)1.1的.NET組件會(huì)創(chuàng)建成功,并且啟動(dòng)1.1的CLR,第二個(gè)2.0的.NET類型會(huì)創(chuàng)建失敗,并且返回REGDB_E_CLASSNOTREG (0x80040154)

總結(jié)一下:通過COM的CoCreateInstance創(chuàng)建.NET類型的實(shí)例的時(shí)候,CLR總是加載***的CLR版本,如果啟動(dòng)成功,檢查該CLR版本是否大于或等于RuntimeVersion鍵值。如果是,成功,返回S_OK,否則失敗,返回REGDB_E_CLASSNOTREG。因此,如果在CoCreateInstance的時(shí)候發(fā)現(xiàn)返回REGDB_E_CLASSNOTREG,但是注冊(cè)表又沒有問題的話,不妨檢查一下RuntimeVersion。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI