十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
C語言沒辦法直接調(diào)用C++庫
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、重慶小程序開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
要調(diào)用C++的庫
必須加一層封裝
即
先寫一個(gè)C++文件,
對每個(gè)要調(diào)用的C++DLL中的函數(shù)func_name,
封裝成
extern
"C"
{
return_type
func_name_C(list)
{
return
func_name(list);
}
}
這樣的形式。
然后
把這個(gè)c++文件,
封裝成dll
C文件調(diào)用這個(gè)dll里面的函數(shù),
間接調(diào)用原始DLL
一.動(dòng)態(tài)鏈接庫(dll)結(jié)構(gòu)
——dll中定義有兩種函數(shù):導(dǎo)出函數(shù)(export
function)和內(nèi)部函數(shù)
(internal
function),導(dǎo)出函數(shù)可以被其他模塊調(diào)用,內(nèi)部函數(shù)只能在dll內(nèi)部使用。我們在用c++定制dll文件時(shí),需要編寫的就是包含導(dǎo)出函數(shù)表的模塊定義文件(.def)和實(shí)現(xiàn)導(dǎo)出函數(shù)功能的c++文件。下面以sample.dll為例介紹def文件和實(shí)現(xiàn)文件的結(jié)構(gòu):
——1.模塊定義文件(.def)是由一個(gè)或者多個(gè)用于描述dll屬性的模塊語
句組成的文本文件,每個(gè).def文件至少必須包含以下模塊定義語句:
第一個(gè)語句必須是library語句,指出dll的名字。
exports語句列出被導(dǎo)出函數(shù)的名字。
可以使用description語句描述dll的用途(此句可選)。
";"對一行進(jìn)行注釋(可選)
——2.實(shí)現(xiàn)文件(.cpp文件為例)
——實(shí)現(xiàn)入口表函數(shù)的.cpp文件中,包含dll入口點(diǎn)處理的api函數(shù)和導(dǎo)出
函數(shù)的代碼。
1、新建DLLTest文件夾,在該文件夾中新建source文件夾。
2、在source文件夾中造add.c。
3、win+R+cmd請出總指揮“命令行”,輸入。
4、繼續(xù)輸入(路徑也要隨機(jī)應(yīng)變)link /DLL /out:E:\VCfile\DLLTest\source\add.dll E:\VCfile\DLLTest\source\add.obj。
5、新建源文件call_dll.c或.cpp放到DLLTest文件夾,同時(shí)add.dll也復(fù)制過來。
6、編譯,連接運(yùn)行出現(xiàn)個(gè)5。調(diào)用成功。
注意事項(xiàng):
C語言能以簡易的方式編譯、處理低級存儲(chǔ)器。C語言是僅產(chǎn)生少量的機(jī)器語言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語言。