中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++Builder如何調(diào)用VisualC++DLL

C++ Builder如何調(diào)用Visual C++ DLL,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)公司自成立以來(lái),一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開(kāi)發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開(kāi)發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

使用C++Builder調(diào)用Visual C++ DLL 創(chuàng)建的DLL不會(huì)比調(diào)用C++Builder 建造的DLL 難,首先,Borland 和 Microsoft 在 OBJ 和引入庫(kù)的文件格式上不同Visual C++ 使用 COFF 庫(kù)格式,而 Borland 使用 OMF 格式。

這就意味著你不能把一個(gè) Microsoft 生成的引入庫(kù)添加到C++Builder 的工程里。感謝 Borland IMPLIB 這個(gè)實(shí)用工具,文件格式的不同得以克服。
兩個(gè)產(chǎn)品在連接名字(linker name)習(xí)慣上也不同。

這是 C++Builder 調(diào)用 Visual C++ DLL 的主要障礙。在 DLL 或 OBJ 里的每一個(gè)函數(shù)有一個(gè)連接名字。連接器用連接名字在連接期間解決(resolve)聲明了原型的函數(shù)。如果連接器不能找到它認(rèn)為是程序需要的連接名字的函數(shù),它將產(chǎn)生一個(gè)未解決的外部錯(cuò)誤(unresolved external error)。

關(guān)于函數(shù)連接名字,Borland 和 Microsoft 在下面兩點(diǎn)上不同:
1- Visual C++ 有時(shí)修飾導(dǎo)出的 __stdcall 函數(shù)。
2- Borland C++Builder 在引入這個(gè)被修飾的函數(shù)時(shí),認(rèn)為是 __cdecl 函數(shù)。

那么,這件事為什么這樣重要呢?拿分歧#1 __stdcall 調(diào)用習(xí)慣來(lái)說(shuō)。如果你用 Visual C++ 創(chuàng)建了一個(gè) DLL,它包含一個(gè) __stdcall 修飾的函數(shù)叫做 MyFunction(),Visual C++ 將給函數(shù)一個(gè)連接名字,為 _MyFunction@4。當(dāng) Borland 連接器設(shè)法解決調(diào)用構(gòu)造這個(gè)函數(shù)的時(shí)候,它認(rèn)為要找一個(gè)名為 MyFunction 的函數(shù)。因?yàn)?Visual C++ DLL 引入庫(kù)不包含叫作 MyFunction 的函數(shù),Borland 連接器報(bào)告一個(gè)未解決的外部錯(cuò)誤,意識(shí)是沒(méi)有找到函數(shù)。

解決這三個(gè)問(wèn)題的方法要依賴 Visual C++ DLL 的編譯方式。我把整個(gè)過(guò)程分為二步。
第1步:識(shí)別在 Visual C++ DLL 里使用的調(diào)用習(xí)慣為了與命名習(xí)慣纏結(jié)交戰(zhàn),你必須首先確定在 DLL 里函數(shù)使用的調(diào)用習(xí)慣。你可以通過(guò)查看 DLL 的頭文件來(lái)確定。在 DLL 頭文件里的函數(shù)原型形式如下

第2步:檢查 DLL 里的連接名字如果在第 1 步中顯示 DLL 利用 __stdcall 調(diào)用習(xí)慣,你需要進(jìn)一步檢查 DLL,確定 Visual C++ 在創(chuàng)建它時(shí)采用的命名習(xí)慣。Visual C++ 默認(rèn)情況下要修飾 __stdcall 函數(shù),但如果寫這個(gè) DLL 的程序員在他們的工程里增加一個(gè) DEF 文件,可以阻止命名修飾。如果供應(yīng)商沒(méi)有使用 DEF 文件,你的工會(huì)稍微繁瑣一些。
命令行工具 TDUMP 允許你檢查 DLL 導(dǎo)出函數(shù)的連接名字。下面向 DLL 調(diào)用 TDUMP 的命令。

TDUMP 能報(bào)告許多關(guān)于 DLL 的信息。我們僅對(duì) DLL 的導(dǎo)出函數(shù)感興趣。-ee 命令選項(xiàng)指示 TDUMP 僅列出導(dǎo)出信息。-m 開(kāi)關(guān)告訴 TDUMP 按 DLL 函數(shù)的原始格式顯示。如果沒(méi)有 -m 開(kāi)關(guān),TDUMP 將嘗試把修飾過(guò)的函數(shù)轉(zhuǎn)化為人們易讀的格式。如果 DLL 很大的話,你應(yīng)該重定向 TDUMP 的輸出到一個(gè)文件里(通過(guò)附加的 > MYDLL.LST)。

TDUMP 為源程序清單 A 和 B 的測(cè)試 DLL 輸出如下:

bo Dump Version 5.0.16.4 Copyright (c) 1988, 1998 Borland International  Display of File DLL.DLL  EXPORT ord:0000='CdeclFunction' EXPORT ord:0002='UnknownFunction' EXPORT ord:0001='_StdCallFunction@4'

注意在 __stdcall 函數(shù)上的前綴下劃線和后綴 @4。__cdecl 和未指定調(diào)用方式的函數(shù)沒(méi)有任何修飾符。如果 Visuall C++ DLL 編譯的時(shí)候帶 DEF 文件,在 __stdcall 函數(shù)上的修飾符將不會(huì)出現(xiàn)。

關(guān)于C++ Builder如何調(diào)用Visual C++ DLL問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

文章名稱:C++Builder如何調(diào)用VisualC++DLL
本文路徑:http://www.rwnh.cn/article26/gposjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、自適應(yīng)網(wǎng)站、軟件開(kāi)發(fā)、面包屑導(dǎo)航搜索引擎優(yōu)化、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
康保县| 桦甸市| 资源县| 星座| 图木舒克市| 昌黎县| 合江县| 博客| 隆德县| 永顺县| 开鲁县| 宜兴市| 泰和县| 荔波县| 毕节市| 上思县| 万山特区| 绥芬河市| 锡林郭勒盟| 左权县| 穆棱市| 阳西县| 望都县| 濉溪县| 甘孜县| 宜川县| 佛教| 鲜城| 临高县| 眉山市| 岫岩| 扎赉特旗| 武义县| 雅江县| 娱乐| 祁连县| 嘉禾县| 专栏| 京山县| 连南| 修水县|