想写一篇关于.net下COM工作原理的文章
今天想寫一篇關(guān)于.net下COM工作原理的文章。花了大概3個(gè)小時(shí),文章也寫的差不多了,可是越寫到后來越發(fā)現(xiàn)自己的觀點(diǎn)以及想法越錯(cuò)誤。
邊寫邊查MSDN,最后不得不放棄發(fā)布這篇文章了。雖然花了好幾個(gè)小時(shí),最后什么也沒有,但還是學(xué)到了不少東西。
總結(jié)一下.net下是如何實(shí)現(xiàn)與COM(或者ActiveX)交互的吧。
記得也是在博客園上看到有一篇文章關(guān)于用C#寫ActiveX的文章,與其說是.net寫ActiveX不如說是.net如何使用它們。
首先應(yīng)該明確以下幾個(gè)問題:
1、在.net平臺下,沒有真正的COM或者ActiveX,它們都只是.net下的一個(gè)封裝。
2、它的封裝是通過COM Interop對托管對象向傳統(tǒng)COM進(jìn)行一個(gè)接口暴露。反之,也是通過COM Interop對傳統(tǒng)COM進(jìn)行一個(gè).net包裝,使.net可以像訪問普通對象一樣的訪問傳統(tǒng)COM。而傳統(tǒng)的COM仍然要在目標(biāo)機(jī)器上注冊。
3、不管是.net訪問傳統(tǒng)COM,還是通過COM訪問.net對象,最終都是離不開.net 平臺的。
4、通過傳統(tǒng)的COM來訪問.net對象,其實(shí)是用.net下的幾個(gè)工具,先從.net下的對象中取得一些源數(shù)據(jù),轉(zhuǎn)化成COM數(shù)據(jù)類型,然后注冊給Windows,同時(shí)也可以暴露給其它應(yīng)用程序(如C++,當(dāng)然它是二進(jìn)制的,但只是一些數(shù)據(jù)和接口的定義,不是真正的代碼)。當(dāng)COM對象來生成.net對象時(shí),用戶是不知道他所要的對象是從哪來的,其實(shí)是.net的COM Interop生成,交給傳統(tǒng)的COM,然后由COM返回經(jīng)過COM Interop封裝后的.net對象。當(dāng)然,用戶還是把它當(dāng)傳統(tǒng)COM來使用,.net為我們完成了數(shù)據(jù)轉(zhuǎn)化工作。
有興趣的讀者可以查一下MSDN里的托管與非托管代碼的混合編程這方面的知識,內(nèi)容還是很多的。
大概就總結(jié)這些,有機(jī)會還是把那篇文章寫完,說真的,辛辛苦苦的寫了好幾個(gè)小時(shí),結(jié)果理解都是有偏差的,真還讓人有點(diǎn)郁悶。還好及時(shí)發(fā)現(xiàn),不至于發(fā)表出來?誤人子弟。多寫些文章還有是幫助的。
轉(zhuǎn)載于:https://www.cnblogs.com/WuCountry/archive/2006/12/11/589047.html
總結(jié)
以上是生活随笔為你收集整理的想写一篇关于.net下COM工作原理的文章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。