vs2019 Com組件初探-簡單的COM編寫以及實現跨語言調用

前提條件html

  一、掌握C++基礎語法java

  二、平臺安裝 vs2019程序員

  三、本地平臺爲 windows 10 1909 X64web

  四、瞭解vbs基礎語法shell

 

本次目標編程

  一、掌握Com組件的概念及原理windows

  二、編寫一個簡單的以DLL形式展示的Com組件安全

  三、經過 VBS 實現跨語言調用COM網絡

 

一、Com組件概念及原理app

  什麼是COM:

    引用百度百科:COM component(COM組件)是微軟公司爲了計算機工業軟件生產更加符合人類的行爲方式開發的一種新的軟件開發技術。在COM構架下,人們能夠開發出各類各樣的功能專注的組件,而後將它們按照須要組合起來,構成複雜的應用系統。由此帶來的好處是多方面的:能夠將系統中的組件用新的替換掉,以便隨時進行系統的升級和定製;能夠在多個應用系統中重複利用同一個組件;能夠方便的將應用系統擴展到網絡環境下;COM與語言,平臺無關的特性使全部的程序員都可充分發揮本身的才智與專長編寫組件模塊。

    (我的理解:com組件就是一種標準,遵循此標準開發出來的組件則爲COM組件,一樣任何語言只要遵循此標準,就能夠調用該組件。而com組件本質上就是二進制可執行文件,com以 DLL 或 EXE 形式發佈的)

 

  什麼是ATL:

 

    引用百度百科:ATL是ActiveX Template Library 的縮寫,它是一套C++模板庫。使用ATL可以快速地開發出高效、簡潔的代碼(Effective and Slim code),同時對COM組件的開發提供最大限度的代碼自動生成以及可視化支持。爲了方便使用,從MicrosoftVisual C++5.0版本開始,Microsoft把ATL集成到Visual C++開發環境中。1998年9月推出的Visual Studio 6.0 集成了ATL 3.0版本。ATL已經成爲Microsoft標準開發工具中的一個重要成員,日益受到C++開發人員的重視。

    (我的理解:ATL 就是微軟發佈的一個C++模板目的是爲了簡化COM編程)

 

  什麼是ActiveX:

    引用百度百科:ActiveX是Microsoft對於一系列策略性面向對象程序技術和工具的稱呼,其中主要的技術是組件對象模型(COM)。在有目錄和其它支持的網絡中,COM變成了分佈式COM(DCOM)。ActiveX 控件是用於互聯網的很小的程序,有時稱爲插件程序它們會容許播放動畫,或幫助執行任務,如在 Microsoft Update 安裝安全更新,所以能夠加強您的瀏覽體驗。  在建立包括ActiveX程序時,主要的工做就是組件,一個能夠自足的在ActiveX網絡(Windows,Mac,Linux)中任意運行的程序。這個組件就是ActiveX控件。ActiveX是Microsoft爲抗衡Sun Microsystems的JAVA技術而提出的,此控件的功能和java applet功能相似。

    (我的理解:ActiveX就是Com組件集合的名字,而且主要用在web方面,本質上就是COM)這裏引用 360百科 的詞條 [ 大白話容易理解 ]

 

二、編寫一個簡單的Com組件

  VS2019 新建基於ATL模板的項目 下一步

   

 

  設置項目名 (注意:項目名必定要記住) 而後建立

   

 

 

   設置ATL項目屬性 (這裏設置基於.dll 方式)

  

  這裏說一下「支持組件註冊」指的是 編譯結束後會自動進行組件註冊

  選擇後點擊肯定,並等待建立完成

  

  完成後會出現ComTest和ComTestPs,不用管*PS

  

 

  

 

  咱們點開ComTest而且能夠看到系統自動生成的頭文件和源文件

   

 

  右鍵ComTest 新建項->添加->新建項

  

 

 

   對 ComTest 新建 「ATL簡單對象」並點擊添加

  

 

   

  設置短名稱爲Temp 其餘的會自動填充 

  ProgID 設置爲 項目名+「.」+短名稱 (ComTest.Temp )

  文件類型以及其餘默認就好點擊完成

  這裏須要注意兩個值

  ProgID 是以後 vbs 及其餘語言 調用組件所須要提供的名稱

  接口 ITemp 爲以後配置 idl 所須要找到的接口名

  

   完成後會在ComTest 下添加 Temp.h 以及 Temp.cpp

  

 

 

 

   如今就能夠建立咱們本身的方法

  Temp.h頭文件中給CTemp添加聲明

  

 

  在 Temp.cpp 文件中實現此方法

  

 

 

   值得一提的是

  __result 必須爲指針用來進行返回

  return 默認爲 S_OK表示執行成功 

 

 

 

   

  定義好方法後打開 ComTest.idl

  還記得咱們在建立ATL簡單對象時候設置的「短名稱」嗎 (ITemp 自動命名規則爲 I+短名稱)

  找到這一段 interface ITemp : IDispatch

  

 

 

 

   在interface ITemp : IDispatch 裏面寫入

  

 

 

 

  [in]  表示 輸入 [out] 表示輸出 [retval] 表示做爲返回值給外界

  值得一提的是 retval 必須只能有一個 並且必須跟在out 後面

 

  

以上就寫好了ComTest組件的所有內容

  選擇生成的位數 x64並 Ctrl + b 生成 dll

  

  

  報錯 不用管他 打開咱們的項目目錄

  

 

 

 

  能夠看到第一個爲生成的ComTest.dll 接下來 註冊Com組件

  這裏注意兩個文件

  ComTest.dll 爲Com組件

  ComTest.tlb 爲 C++ 調用Com所須要包含的文件

    

 

 

  管理員權限打開 cmd 或者 powershell  

  並進入到dll存在的目錄

  輸入命令註冊咱們的DLL 

  

 

  註冊成功

  

 

 

三、經過 VBS 實現跨語言調用COM

  

 

   編寫vbs代碼  ComTest.Temp爲ATL簡單對象設置的ProgID而Number爲類中的方法

   

 

  保存並運行 執行成功

  

 

 

 

注意事項:

  vbs調用的com必須爲IDispatch 接口

  vs2019 ATL 默認爲 繼承 IDispatch 接口

  Com組件必須註冊後VBS才能夠調用

相關文章
相關標籤/搜索