前提條件
1、掌握c++基礎(chǔ)語法
2、平臺安裝 vs2019
3、本地平臺為 windows 10 1909 x64
4、了解vbs基礎(chǔ)語法
本次目標(biāo)
1、掌握com組件的概念及原理
2、編寫一個簡單的以dll形式展現(xiàn)的com組件
3、通過 vbs 實(shí)現(xiàn)跨語言調(diào)用com
1、com組件概念及原理
什么是com:
引用百度百科:com component(com組件)是微軟公司為了計(jì)算機(jī)工業(yè)的軟件生產(chǎn)更加符合人類的行為方式開發(fā)的一種新的軟件開發(fā)技術(shù)。在com構(gòu)架下,人們可以開發(fā)出各種各樣的功能專一的組件,然后將它們按照需要組合起來,構(gòu)成復(fù)雜的應(yīng)用系統(tǒng)。由此帶來的好處是多方面的:可以將系統(tǒng)中的組件用新的替換掉,以便隨時進(jìn)行系統(tǒng)的升級和定制;可以在多個應(yīng)用系統(tǒng)中重復(fù)利用同一個組件;可以方便的將應(yīng)用系統(tǒng)擴(kuò)展到網(wǎng)絡(luò)環(huán)境下;com與語言,平臺無關(guān)的特性使所有的程序員均可充分發(fā)揮自己的才智與專長編寫組件模塊。
(個人理解:com組件就是一種標(biāo)準(zhǔn),遵循此標(biāo)準(zhǔn)開發(fā)出來的組件則為com組件,同樣任何語言只要遵循此標(biāo)準(zhǔn),就可以調(diào)用該組件。而com組件本質(zhì)上就是二進(jìn)制可執(zhí)行文件,com以 dll 或 exe 形式發(fā)布的)
什么是atl:
引用百度百科:atl是activex template library 的縮寫,它是一套c++模板庫。使用atl能夠快速地開發(fā)出高效、簡潔的代碼(effective and slim code),同時對com組件的開發(fā)提供最大限度的代碼自動生成以及可視化支持。為了方便使用,從microsoftvisual c++5.0版本開始,microsoft把a(bǔ)tl集成到visual c++開發(fā)環(huán)境中。1998年9月推出的visual studio 6.0 集成了atl 3.0版本。atl已經(jīng)成為microsoft標(biāo)準(zhǔn)開發(fā)工具中的一個重要成員,日益受到c++開發(fā)人員的重視。
(個人理解:atl 就是微軟發(fā)布的一個c++模板目的是為了簡化com編程)
什么是activex:
引用百度百科:activex是microsoft對于一系列策略性面向?qū)ο蟪绦?/a>技術(shù)和工具的稱呼,其中主要的技術(shù)是組件對象模型(com)。在有目錄和其它支持的網(wǎng)絡(luò)中,com變成了分布式com(dcom)。activex 控件是用于互聯(lián)網(wǎng)的很小的程序,有時稱為插件程序。它們會允許播放動畫,或幫助執(zhí)行任務(wù),如在 microsoft update 安裝安全更新,因此可以增強(qiáng)您的瀏覽體驗(yàn)。在創(chuàng)建包括activex程序時,主要的工作就是組件,一個可以自足的在activex網(wǎng)絡(luò)(windows,mac,linux)中任意運(yùn)行的程序。這個組件就是activex控件。activex是microsoft為抗衡sun microsystems的java技術(shù)而提出的,此控件的功能和java applet功能類似。
(個人理解:activex就是com組件集合的名字,并且主要用在web方面,本質(zhì)上就是com)這里引用的詞條[ 大白話容易理解 ]
2、編寫一個簡單的com組件
vs2019 新建基于atl模板的項(xiàng)目 下一步
設(shè)置項(xiàng)目名 (注意:項(xiàng)目名一定要記住) 然后創(chuàng)建
設(shè)置atl項(xiàng)目屬性 (這里設(shè)置基于.dll 方式)
這里說一下“支持組件注冊”指的是 編譯結(jié)束后會自動進(jìn)行組件注冊
選擇后點(diǎn)擊確定,并等待創(chuàng)建完成
完成后會出現(xiàn)comtest和comtestps,不用管ps
我們點(diǎn)開comtest并且可以看到系統(tǒng)自動生成的頭文件和源文件
現(xiàn)在添加一個新的atl對象
右鍵comtest 新建項(xiàng)->添加->新建項(xiàng)
對 comtest 新建 “atl簡單對象”并點(diǎn)擊添加
設(shè)置短名稱為temp 其他的會自動填充
progid 設(shè)置為 項(xiàng)目名+“.”+短名稱 (comtest.temp )
文件類型以及其他默認(rèn)就好點(diǎn)擊完成
這里需要注意兩個值
progid 是之后 vbs 及其他語言 調(diào)用組件所需要提供的名稱
接口 itemp 為之后配置 idl 所需要找到的接口名
完成后會在comtest 下自動添加 temp.h 以及 temp.cpp以及生成一個ctemp類
現(xiàn)在就可以創(chuàng)建我們自己的方法
temp.h頭文件中給ctemp添加函數(shù)聲明
在 temp.cpp 文件中實(shí)現(xiàn)此函數(shù)
值得一提的是
__result 必須為指針用來進(jìn)行返回
return 默認(rèn)為 s_ok表示執(zhí)行成功
定義好方法后打開 comtest.idl
還記得我們在創(chuàng)建atl簡單對象時候設(shè)置的“短名稱”嗎 (itemp 自動命名規(guī)則為 i+短名稱)
找到這一段 interface itemp : idispatch
在interface itemp : idispatch 里面寫入
[in] 表示 輸入[out] 表示輸出 [retval] 表示作為返回值給外界
值得一提的是 retval 必須只能有一個 而且必須跟在out 后面
以上就寫好了comtest組件的全部內(nèi)容
選擇生成的位數(shù) x64快捷鍵 ctrl + b 生成 dll
這里會看到生成報(bào)錯
不用管他 打開我們的項(xiàng)目目錄
可以看到第一個為生成的comtest.dll 接下來 注冊com組件
這里注意兩個文件
comtest.dll 為 com 組件本體
comtest.tlb 是之后c++ 調(diào)用com所需要包含的文件
管理員權(quán)限打開 cmd 或者 powershell
并進(jìn)入到dll存在的目錄
輸入命令注冊我們的dll
輸入后會出現(xiàn) 已成功
如果不成功嘗試在管理員權(quán)限下去注冊
3、通過 vbs 實(shí)現(xiàn)跨語言調(diào)用com
編寫vbs代碼 comtest.temp為“atl簡單對象”設(shè)置的“progid”而number為類中的函數(shù)名
保存并運(yùn)行 執(zhí)行成功
注意事項(xiàng):
vbs調(diào)用的com必須為idispatch 接口
vs2019 atl 默認(rèn)為 繼承 idispatch 接口
com組件必須注冊后vbs才可以調(diào)用
github源碼地址
3065190005/comtest: comtest code (github.com)
到此這篇關(guān)于vs2019 com組件初探之簡單的com編寫及實(shí)現(xiàn)跨語言調(diào)用的方法的文章就介紹到這了,更多相關(guān)vs2019 com組件內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://www.cnblogs.com/MF-Blog/p/14063897.html