在C++builder中用僞造的dll生成的lib文件可正常調用vc寫的dll

    引子:“在C++builder6中動態調用的方法,(靜態的調用試驗沒成功,主要是用implib沒法生成正確的Pinyin.lib,內容缺文件名,一啓動就報找不到文件,不知道誰可以幫忙解決這個問題)”。

    在做《在delphi 7中實現獲取漢字拼音首字母》時,順便試着寫C++builder 6的調用例子,可惜當時靜態調用沒成功,帶中文路徑的implib生成的lib文件竟然和在根目錄下生產成的lib文件內容不一樣(用UltraEdit看就知道了),如:"implib E:/拼音首字母/Pinyin.lib E:/拼音首字母/Pinyin.dll" 和 "implib F:/Pinyin.lib F:/Pinyin.dll" 生成的Pinyin.lib就不一樣。前者編譯通過,運行時,報找不到"E CORPORATION         .dll",然後訪問地址出錯;後者直接編譯不過,報連接錯誤"[Linker Error] Unresolved external 'GetPinYinLeader' referenced from E:/拼音首字母/UNIT1.OBJ "。

      試過其他各種方法生成lib,包括直接修改二進制文件,都沒成功。最後想到以前有個帖子說可以僞造一個有空方法體的dll,生成的lib可直接調用vc生成的dll。

    原話是這樣的:“lib可以造假的,比如vc dll有一個函數 你用bcb寫一個dll也有同樣的函數,實現是空的,然後編譯出來
其他使用dll的工程鏈接lib中這個lib,dll則還是用VC的dll”

     參考地址:http://topic.csdn.net/u/20090302/17/99d1fbc5-4be6-4744-96d9-09b16c0d93c3.html

 

這個拼音庫的幫助參考文字是這樣的:

----------------------------------------------------------------------------

本DLL只有兩個函數,函數原型如下:

    //獲得拼音
    //參數依次爲: 拼音緩存區,要轉換的字符,分隔符
    BOOL WINAPI GetPinYin(PCHAR pBuf,PCHAR pStr,PCHAR pSeparator)

    //獲得拼音首字母
    //參數依次爲: 拼音緩存區,要轉換的字符
    BOOL WINAPI GetPinYinLeader(PCHAR pBuf,PCHAR pStr)

-------------------------------------------------------------------------------------

 

 

下面是僞造dll的代碼:

   

 

靜態調用代碼:

 

經過測試,結論:是可以這樣做的,得出的結果跟動態調用一樣。

 

發佈了24 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章