中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

C++Builder如何調用VisualC++DLL

C++ Builder如何調用Visual C++ DLL,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創新互聯公司自成立以來,一直致力于為企業提供從網站策劃、網站設計、成都網站制作、網站設計、電子商務、網站推廣、網站優化到為企業提供個性化軟件開發等基于互聯網的全面整合營銷服務。公司擁有豐富的網站建設和互聯網應用系統開發管理經驗、成熟的應用系統解決方案、優秀的網站開發工程師團隊及專業的網站設計師團隊。

使用C++Builder調用Visual C++ DLL 創建的DLL不會比調用C++Builder 建造的DLL 難,首先,Borland 和 Microsoft 在 OBJ 和引入庫的文件格式上不同Visual C++ 使用 COFF 庫格式,而 Borland 使用 OMF 格式。

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

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

關于函數連接名字,Borland 和 Microsoft 在下面兩點上不同:
1- Visual C++ 有時修飾導出的 __stdcall 函數。
2- Borland C++Builder 在引入這個被修飾的函數時,認為是 __cdecl 函數。

那么,這件事為什么這樣重要呢?拿分歧#1 __stdcall 調用習慣來說。如果你用 Visual C++ 創建了一個 DLL,它包含一個 __stdcall 修飾的函數叫做 MyFunction(),Visual C++ 將給函數一個連接名字,為 _MyFunction@4。當 Borland 連接器設法解決調用構造這個函數的時候,它認為要找一個名為 MyFunction 的函數。因為 Visual C++ DLL 引入庫不包含叫作 MyFunction 的函數,Borland 連接器報告一個未解決的外部錯誤,意識是沒有找到函數。

解決這三個問題的方法要依賴 Visual C++ DLL 的編譯方式。我把整個過程分為二步。
第1步:識別在 Visual C++ DLL 里使用的調用習慣為了與命名習慣纏結交戰,你必須首先確定在 DLL 里函數使用的調用習慣。你可以通過查看 DLL 的頭文件來確定。在 DLL 頭文件里的函數原型形式如下

第2步:檢查 DLL 里的連接名字如果在第 1 步中顯示 DLL 利用 __stdcall 調用習慣,你需要進一步檢查 DLL,確定 Visual C++ 在創建它時采用的命名習慣。Visual C++ 默認情況下要修飾 __stdcall 函數,但如果寫這個 DLL 的程序員在他們的工程里增加一個 DEF 文件,可以阻止命名修飾。如果供應商沒有使用 DEF 文件,你的工會稍微繁瑣一些。
命令行工具 TDUMP 允許你檢查 DLL 導出函數的連接名字。下面向 DLL 調用 TDUMP 的命令。

TDUMP 能報告許多關于 DLL 的信息。我們僅對 DLL 的導出函數感興趣。-ee 命令選項指示 TDUMP 僅列出導出信息。-m 開關告訴 TDUMP 按 DLL 函數的原始格式顯示。如果沒有 -m 開關,TDUMP 將嘗試把修飾過的函數轉化為人們易讀的格式。如果 DLL 很大的話,你應該重定向 TDUMP 的輸出到一個文件里(通過附加的 > MYDLL.LST)。

TDUMP 為源程序清單 A 和 B 的測試 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 函數上的前綴下劃線和后綴 @4。__cdecl 和未指定調用方式的函數沒有任何修飾符。如果 Visuall C++ DLL 編譯的時候帶 DEF 文件,在 __stdcall 函數上的修飾符將不會出現。

關于C++ Builder如何調用Visual C++ DLL問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯行業資訊頻道了解更多相關知識。

文章名稱:C++Builder如何調用VisualC++DLL
本文路徑:http://www.2m8n56k.cn/article26/gposjg.html

成都網站建設公司_創新互聯,為您提供網站排名自適應網站軟件開發面包屑導航搜索引擎優化網站策劃

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站
主站蜘蛛池模板: 日本一区二区三区四区无限 | 国产一及片 | 日韩中文字幕网站 | 亚洲天堂男人的天堂 | 特级aaa片毛片免费观看 | 一级美国片免费看 | 国产精品三级手机在线观看 | 亚洲人的天堂男人爽爽爽 | 9丨精品国产高清自在线看 ⅹxx中国xxx人妖 | 欧美二区视频 | 91久久精品青青草原伊人 | www.99热.com| 男人的天堂精品国产一区 | 中文在线com| 久久久久久久久综合 | 亚洲国产精品免费观看 | 免费国产一区二区在免费观看 | 精品国产一区二区三区成人 | 亚洲成a人片 | 国产最爽的乱淫视频国语对 | 国产美女午夜精品福利视频 | avav男人天堂 | 97视频免费观看2区 97视频免费上传播放 | 国产亚洲在线 | 日本a级特黄三级三级三级 日本a一级片 | 国产精品久久一区二区三区 | 在线精品国产三级 | 窝窝女人体国产午夜视频 | 日韩一级片在线观看 | 欧美精品一区二区三区在线 | 免费一级大毛片a一观看不卡 | 欧美一区二区三区国产精品 | 久久最新 | wwwwwww黄| 日本一区二区三区在线 视频 | 欧美一区二区三区在线观看 | 天天看片天天爽 | 欧美最大成人毛片视频网站 | 欧美另类在线观看 | 久久伊人男人的天堂网站 | 国产一区二区在线观看免费 |