进程内COM与进程外COM
1、進(jìn)程內(nèi)和進(jìn)程外Com
COM/DCOM 組件可以在DLL 或EXE 文檔中實(shí)現(xiàn)。
其中在 DLL 中實(shí)現(xiàn)的COM/DCOM組件稱為 In-Process Server,因?yàn)檫@些組件是加載到使用它們的客戶端應(yīng)用程序執(zhí)行程序內(nèi)存之中。因此當(dāng)應(yīng)用程序調(diào)用COM/DCOM 組件的服務(wù)時(shí),就和一般的程序或函數(shù)調(diào)用一樣,非??焖?。
在EXE 中實(shí)現(xiàn)的COM/DCOM組件是執(zhí)行在它自己的執(zhí)行程序之中,因此這種 COM/DCOM組件稱為Out-Process Server。當(dāng)
客戶端應(yīng)用程序調(diào)用在獨(dú)立的執(zhí)行程序中的 COM/DCOM 組件時(shí)必須穿越不同的執(zhí)行程序,因?yàn)?Out-Process Server 在執(zhí)行時(shí)會(huì)比In-Process Server 慢許多。
應(yīng)用程序調(diào)用 DCOM 組件時(shí),可能會(huì)穿越執(zhí)行程序,也可能會(huì)穿越不同的機(jī)器,因此在許多情形下應(yīng)用程序無(wú)法直接調(diào)用DCOM 組件,而必須通過(guò)Proxy和Stub的幫助應(yīng)用程序必須通過(guò)Proxy/Stub才能調(diào)用DCOM組件的服務(wù)。
到底什么是Proxy 和Stub 呢?簡(jiǎn)單地說(shuō),Proxy 就是遠(yuǎn)程COM 對(duì)象在應(yīng)用程序的執(zhí)行程序中的影像 (Image ),遠(yuǎn)程COM 對(duì)象提供了什么接口和方法,它的Proxy就有什么接口和方法。因此,當(dāng)應(yīng)用程序在調(diào)用遠(yuǎn)程對(duì)象的服務(wù)時(shí),事實(shí)上是調(diào)用了它的執(zhí)行程序中的Proxy。當(dāng)Proxy 被應(yīng)用程序調(diào)用后,Proxy 便會(huì)封裝這些調(diào)用信息,再通過(guò)通信協(xié)議調(diào)用遠(yuǎn)程的 Stub。而Stub的工作便是接受Proxy的調(diào)用信息,再使用這些信息調(diào)用真正的COM/DCOM對(duì)象。最后,Stub再把調(diào)用的結(jié)果回傳給Proxy,由Proxy回傳給應(yīng)用程序。
Proxy/Stub 是從哪里來(lái)的呢?
得根據(jù)應(yīng)用程序使用的接口是原生COM 接口還是Automation 接口來(lái)決定。如果是調(diào)用COM 原生接口,那么Proxy/Stub便是由Microsoft 的MIDL 編譯器根據(jù)COM/DCOM 對(duì)象的IDL 文檔編譯而來(lái)。而如果是Automation 接口,那么由于 Windows 操作系統(tǒng)提供了通用的Proxy/Stub,因此應(yīng)用程序可以直接通過(guò)這個(gè)通用的Proxy/Stub 即可。在Delphi 中,當(dāng)我們建立 MTS/COM+對(duì)象時(shí), Delphi 會(huì)使用系統(tǒng)的通用Proxy/Stub DLL,因此我們并不需要為如何產(chǎn)生Proxy/Stub 這兩個(gè)DLL 煩惱。
2、OPC服務(wù)器
在開(kāi)始開(kāi)發(fā)一個(gè)OPC服務(wù)器之前,用戶還要確定服務(wù)器的運(yùn)行形式。OPC服務(wù)器做為一個(gè)COM組件,運(yùn)行方式主要包括進(jìn)程內(nèi)(DLL)、進(jìn)程外(EXE)以及服務(wù)(Service)。這里的進(jìn)程內(nèi)/外是相對(duì)于客戶程序說(shuō)的,當(dāng)OPC服務(wù)器是進(jìn)程內(nèi)組件時(shí),它運(yùn)行在客戶程序的進(jìn)程里(遠(yuǎn)程連接時(shí)是宿主程序(host)的進(jìn)程),而我們通常接觸到的OPC服務(wù)器一般都是進(jìn)程外組件。選擇哪一種形式要看具體的應(yīng)用需求,進(jìn)程內(nèi)形式適合輕量級(jí)的小型服務(wù)器,特別是當(dāng)?shù)讓釉O(shè)備具有較高的性能,支持并發(fā)多連接訪問(wèn),OPC客戶及服務(wù)器程序處于同一計(jì)算機(jī)上時(shí),可采用進(jìn)程內(nèi)形式。其它情況下進(jìn)程外形式可能更適合一些。簡(jiǎn)言之,當(dāng)你不清楚到底那種更合適時(shí),就選擇進(jìn)程外方式。服務(wù)形式主要是和進(jìn)程外形式比較的,它在后臺(tái)運(yùn)行,沒(méi)有用戶界面。當(dāng)OPC服務(wù)器計(jì)算機(jī)可能在沒(méi)有用戶登錄,或者需要經(jīng)常切換登錄用戶時(shí),服務(wù)形式的OPC服務(wù)器是最合適的。無(wú)論那種形式,都與設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的關(guān)系不大,大部分的OPC服務(wù)器開(kāi)發(fā)工具都帶有每種形式的服務(wù)器例程,用戶可在開(kāi)發(fā)時(shí)參考。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的进程内COM与进程外COM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个一元二次方程求解编程引申的两个知识点
- 下一篇: cms查询系统(一)背景以及需求分析与设