C語言沒辦法直接調(diào)用C++庫
目前成都創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、察布查爾錫伯網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
要調(diào)用C++的庫
必須加一層封裝
即 先寫一個C++文件, 對每個要調(diào)用的C++DLL中的函數(shù)func_name, 封裝成
extern "C"
{
return_type func_name_C(list)
{
return func_name(list);
}
}
這樣的形式。
然后 把這個c++文件, 封裝成dll
C文件調(diào)用這個dll里面的函數(shù), 間接調(diào)用原始DLL
導出函數(shù),總體來說有兩種方法,一種是添加一個def定義文件,在此文件中定義dll中要輸出的函數(shù);第二種是在源代碼中待輸出的函數(shù)前加上__declspec(dllexport)關(guān)鍵字。
關(guān)于使用DLL的資源
先LoadLibrary加載DLL
然后就可以用相關(guān)的函數(shù)調(diào)用其中的資源了。
1、新建DLLTest文件夾,在該文件夾中新建source文件夾。
2、在source文件夾中造add.c。
3、win+R+cmd請出總指揮“命令行”,輸入。
4、繼續(xù)輸入(路徑也要隨機應變)link /DLL /out:E:\VCfile\DLLTest\source\add.dll E:\VCfile\DLLTest\source\add.obj。
5、新建源文件call_dll.c或.cpp放到DLLTest文件夾,同時add.dll也復制過來。
6、編譯,連接運行出現(xiàn)個5。調(diào)用成功。
注意事項:
C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產(chǎn)生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設(shè)計語言。
dll里的函數(shù)列標一般只有函數(shù)名。函數(shù)原型從dll里一般不會反映出來。因為dll里面的函數(shù)通常都是按C語言導出的。
獲取lib必須在知道函數(shù)原型的前提下(也就是說得通過其他途徑知道你需要的函數(shù)的原型)。你可以自己寫一個同名的dll,把你需要的這個dll里的函數(shù)都寫進去,函數(shù)實現(xiàn)可以隨便寫。編譯后會產(chǎn)生一個.lib,這個就是你需要的東西。
一.動態(tài)鏈接庫(dll)結(jié)構(gòu)
——dll中定義有兩種函數(shù):導出函數(shù)(export
function)和內(nèi)部函數(shù)
(internal
function),導出函數(shù)可以被其他模塊調(diào)用,內(nèi)部函數(shù)只能在dll內(nèi)部使用。我們在用c++定制dll文件時,需要編寫的就是包含導出函數(shù)表的模塊定義文件(.def)和實現(xiàn)導出函數(shù)功能的c++文件。下面以sample.dll為例介紹def文件和實現(xiàn)文件的結(jié)構(gòu):
——1.模塊定義文件(.def)是由一個或者多個用于描述dll屬性的模塊語
句組成的文本文件,每個.def文件至少必須包含以下模塊定義語句:
第一個語句必須是library語句,指出dll的名字。
exports語句列出被導出函數(shù)的名字。
可以使用description語句描述dll的用途(此句可選)。
";"對一行進行注釋(可選)
——2.實現(xiàn)文件(.cpp文件為例)
——實現(xiàn)入口表函數(shù)的.cpp文件中,包含dll入口點處理的api函數(shù)和導出
函數(shù)的代碼。
當前題目:c語言dll提取函數(shù) c語言dll導出
標題鏈接:http://jinyejixie.com/article46/docpdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、品牌網(wǎng)站設(shè)計、標簽優(yōu)化、外貿(mào)建站、企業(yè)網(wǎng)站制作、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)