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