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