vs2019 Com組件初探之簡單的COM編寫及實(shí)現(xiàn)跨語言調(diào)用的方法
前提條件
1、掌握C++基礎(chǔ)語法
2、平臺(tái)安裝 vs2019
3、本地平臺(tái)為 windows 10 1909 X64
4、了解vbs基礎(chǔ)語法
本次目標(biāo)
1、掌握Com組件的概念及原理
2、編寫一個(gè)簡單的以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)中的組件用新的替換掉,以便隨時(shí)進(jìn)行系統(tǒng)的升級和定制;可以在多個(gè)應(yīng)用系統(tǒng)中重復(fù)利用同一個(gè)組件;可以方便的將應(yīng)用系統(tǒng)擴(kuò)展到網(wǎng)絡(luò)環(huán)境下;COM與語言,平臺(tái)無關(guān)的特性使所有的程序員均可充分發(fā)揮自己的才智與專長編寫組件模塊。
?。▊€(gè)人理解: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),同時(shí)對COM組件的開發(fā)提供最大限度的代碼自動(dòng)生成以及可視化支持。為了方便使用,從MicrosoftVisual C++5.0版本開始,Microsoft把ATL集成到Visual C++開發(fā)環(huán)境中。1998年9月推出的Visual Studio 6.0 集成了ATL 3.0版本。ATL已經(jīng)成為Microsoft標(biāo)準(zhǔn)開發(fā)工具中的一個(gè)重要成員,日益受到C++開發(fā)人員的重視。
(個(gè)人理解:ATL 就是微軟發(fā)布的一個(gè)C++模板目的是為了簡化COM編程)
什么是ActiveX:
引用百度百科:ActiveX是Microsoft對于一系列策略性面向?qū)ο蟪绦?/a>技術(shù)和工具的稱呼,其中主要的技術(shù)是組件對象模型(COM)。在有目錄和其它支持的網(wǎng)絡(luò)中,COM變成了分布式COM(DCOM)。ActiveX 控件是用于互聯(lián)網(wǎng)的很小的程序,有時(shí)稱為插件程序。它們會(huì)允許播放動(dòng)畫,或幫助執(zhí)行任務(wù),如在 Microsoft Update 安裝安全更新,因此可以增強(qiáng)您的瀏覽體驗(yàn)。在創(chuàng)建包括ActiveX程序時(shí),主要的工作就是組件,一個(gè)可以自足的在ActiveX網(wǎng)絡(luò)(Windows,Mac,Linux)中任意運(yùn)行的程序。這個(gè)組件就是ActiveX控件。ActiveX是Microsoft為抗衡Sun Microsystems的JAVA技術(shù)而提出的,此控件的功能和java applet功能類似。
(個(gè)人理解:ActiveX就是Com組件集合的名字,并且主要用在web方面,本質(zhì)上就是COM)這里引用360百科的詞條[ 大白話容易理解 ]
2、編寫一個(gè)簡單的Com組件
VS2019 新建基于ATL模板的項(xiàng)目 下一步
設(shè)置項(xiàng)目名?。ㄗ⒁猓喉?xiàng)目名一定要記?。?然后創(chuàng)建
設(shè)置ATL項(xiàng)目屬性 (這里設(shè)置基于.dll 方式)
這里說一下“支持組件注冊”指的是 編譯結(jié)束后會(huì)自動(dòng)進(jìn)行組件注冊
選擇后點(diǎn)擊確定,并等待創(chuàng)建完成
完成后會(huì)出現(xiàn)ComTest和ComTestPs,不用管PS
我們點(diǎn)開ComTest并且可以看到系統(tǒng)自動(dòng)生成的頭文件和源文件
現(xiàn)在添加一個(gè)新的ATL對象
右鍵ComTest 新建項(xiàng)->添加->新建項(xiàng)
對 ComTest 新建 “ATL簡單對象”并點(diǎn)擊添加
設(shè)置短名稱為Temp 其他的會(huì)自動(dòng)填充
ProgID 設(shè)置為 項(xiàng)目名+“.”+短名稱 (ComTest.Temp )
文件類型以及其他默認(rèn)就好點(diǎn)擊完成
這里需要注意兩個(gè)值
ProgID 是之后 vbs 及其他語言 調(diào)用組件所需要提供的名稱
接口 ITemp 為之后配置 idl 所需要找到的接口名
完成后會(huì)在ComTest 下自動(dòng)添加 Temp.h 以及 Temp.cpp以及生成一個(gè)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í)候設(shè)置的“短名稱”嗎 (ITemp 自動(dòng)命名規(guī)則為 I+短名稱)
找到這一段 interface ITemp : IDispatch
在interface ITemp : IDispatch 里面寫入
[in] 表示 輸入[out] 表示輸出 [retval] 表示作為返回值給外界
值得一提的是 retval 必須只能有一個(gè) 而且必須跟在out 后面
以上就寫好了ComTest組件的全部內(nèi)容
選擇生成的位數(shù) x64快捷鍵 Ctrl + b 生成 dll
這里會(huì)看到生成報(bào)錯(cuò)
不用管他 打開我們的項(xiàng)目目錄
可以看到第一個(gè)為生成的ComTest.dll 接下來 注冊Com組件
這里注意兩個(gè)文件
ComTest.dll 為 Com 組件本體
ComTest.tlb 是之后C++ 調(diào)用Com所需要包含的文件
管理員權(quán)限打開 cmd 或者 powershell
并進(jìn)入到dll存在的目錄
輸入命令注冊我們的DLL
輸入后會(huì)出現(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ Boost Lockfree超詳細(xì)講解使用方法
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11C++標(biāo)準(zhǔn)庫bitset類型的簡單使用方法介紹
這篇文章主要介紹了C++標(biāo)準(zhǔn)庫bitset類型的簡單使用方法,需要的朋友可以參考下2017-07-07C++ 風(fēng)靡一時(shí)的連連看游戲的實(shí)現(xiàn)流程詳解
游戲“連連看”是源自臺(tái)灣的桌面小游戲,自從流入大陸以來風(fēng)靡一時(shí),也吸引眾多程序員開發(fā)出多種版本的“連連看”。這其中,顧芳編寫的“阿達(dá)連連看”以其精良的制作廣受好評,這也成為顧方“阿達(dá)系列軟件”的核心產(chǎn)品。并于2004年,取得國家版權(quán)局的計(jì)算機(jī)軟件登記證書2021-11-11c++ builder TreeView控件節(jié)點(diǎn)遍歷代碼
這篇文章介紹了c++ builder TreeView控件節(jié)點(diǎn)遍歷代碼,有需要的朋友可以參考一下2013-09-09ubuntu系統(tǒng)下C++調(diào)用matlab程序的方法詳解
學(xué)習(xí)c++與matlab混合編程一般是通過c++調(diào)用matlab函數(shù),因?yàn)閙atlab具有強(qiáng)大的數(shù)學(xué)函數(shù)庫,然而vc++具有界面設(shè)計(jì)靈活的優(yōu)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于在ubuntu系統(tǒng)下C++調(diào)用matlab程序的方法,需要的朋友可以參考下。2017-08-08