我知道有一個名爲Dll的工具,但開發人員要求$ 1000。 我只需要一次轉換一個庫,所以不容易證明這個價格。將Windows Dll轉換爲C++ Visual Studio 2008的.lib
我試過IMPLIB32.EXE,但我只是得到空的.lib文件。 我該如何做到這一點? 也許我可以寫一個簡單的轉換應用程序?
Added1:
DLL的一般STDCALL沒有CDECL和用舊ç像語言不是C#或.NET或C++。我現在需要從C++應用程序調用它們。一個例子是SQLite.dll或zlib.dll。 我無權訪問這些dll的.lib文件。
Added2:
我重新寫了VS2008 http://floodyberry.wordpress.com/2008/09/08/generating-dll-wrappers/ 此代碼,這裏包括的示例的Dll等下載: http://www.transferbigfiles.com/Get.aspx?id=7d86fa0b-6ddc-4f6f-8d31-2c20824aae9a 這又使得創建一個DLL項目。當我嘗試編譯Dll時,出現連接器錯誤: AddShow.dll:致命錯誤LNK1107:無效或損壞的文件:無法在0x300讀取 http://list.isis.vanderbilt.edu/pipermail/udm-users/2006-March/000664.html 不知道如何繼續。這麼近又那麼遠
接下來我們進入這個方法
http://www.coderetard.com/2009/01/21/generate-a-lib-from-a-dll-with-visual-studio/
運行DUMPBIN的說法/出口C:\路徑\到\ AddShow.dll 確實是絕對沒有 一些研究
後http://msdn.microsoft.com/en-us/library/aa446532.aspx 似乎mspdb71.dll(現mspdb80.dll)從現在通用/ IDE文件夾 DUMPBIN.EXE需要運行出現錯誤:
致命錯誤LNK1106:無效的文件或磁盤已滿:無法尋求0x6179A 這些線程表明DUMPBIN.EXE的版本可能是問題
我有Microsoft(R)COFF/PE自卸車版本9.00.30729.01
因此,我試圖 微軟®(R)COFF二進制文件翻車機版本5.12.8078 沒有成功。 多看完後我沒有接近
http://support.microsoft.com/kb/815645 http://support.microsoft.com/kb/839286 http://markmail.org/message/p5vwzyfyv3bs6z34 http://fixunix.com/programmer/94825-fatal-error-lnk1106-invalid-file-disk-full.html
當我運行procmon中我看到QueryOpen和sqlite3.dll中第一次出現時的svchost.exe試圖打開它,失敗與錯誤路徑未找到。路徑是C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ bin \ SQLITE3.DLL並且正確。如果我把它放在C盤的根目錄,然後我得到找不到名稱錯誤:
C:\ Program Files文件\微軟的Visual Studio 9.0 \ VC \ BIN \ link.exe.Local
C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ bin \ dumpbin。exe.Local
分別來自link.exe和dumpbin.exe。我使用XPSP3而不是Vista,這是關於我對sysinternals知識的限制。這些.local文件是什麼?
(CSRSS.EXE也不能找幾個清單文件。)
所以沒有成功呢,只是更多的神祕
新增3:
我試圖運行DUMPBIN.EXE從它的安裝位置\ Program Files \ Microsoft Visual Studio 8 \ VC \ bin中,但操作系統表示找不到mspdb80.dll。我從\ Program Files \ Microsoft Visual Studio 8 \ Common7 \ IDE複製了mspdb80.dll,試圖讓dumpbin.exe運行。
現在我得到的錯誤: 「c1902程序數據庫管理器不匹配,請檢查您的安裝」
如果我從\ Program Files文件\微軟的Visual Studio mspdb80.dll除去8 \ VC \ bin中的錯誤消失!但我無法運行dumpbin.exe。
新增4:
我終於能夠得到DUMPBIN由以下文件複製到一個文件夾運行:
DUMPBIN.EXE LINK.EXE LIB.EXE mspdb80.dll
我沒有得到錯誤:
致命錯誤LNK1248:圖像尺寸(FFFFFXXX)超過最大允許大小 (8000)
曾經,但更換DLL固定的。據推測它被損壞了?
我再移到中的說明下一步: http://www.coderetard.com/2009/01/21/generate-a-lib-from-a-dll-with-visual-studio/ http://support.microsoft.com/kb/131313 並得到了錯誤: 警告lnk4017聲明不支持忽視 目標平臺這原來是因爲我指定的.dll文件,而不是.def文件。
然後將生成的.Lib和.exp文件添加到VS2008項目並編譯並運行。調試器則報告錯誤: 運行時檢查失敗#0 - ESP的值未正確保存跨函數調用...
如此地 "Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call" after successful C# callback from the C++ code of GameSpy lib 這是因爲我在DLL中使用STDCALL並在我的應用程序中聲明瞭__cdecl。
extern "C" { // put Dll C function prototypes here
int __cdecl AddTwoNum(int n, double f); // __stdcall
}
因此改變這__stdcall應該修復它,你會覺得..但可惜沒有。
現在我得到一個鏈接錯誤: 錯誤LNK2001:解析外部符號_AddTwoNum @ 12
這是出於某種原因裝飾函數名。爲什麼?
中加入N:
嗯,這竟然是因爲的.lib文件是使用一個dll進行,但與STDCALL功能。 STDCALL需要調用者清理堆棧,以便使用@符號將參數的字節數附加到函數名稱。在這種情況下,我有三個4Byte iintegers總共12個字節。
一旦我從用CDECL調用約定創建的dll重新創建.lib文件,那麼一切都很好。
這是一個原生的C/C++ DLL或.NET嗎? – 2009-10-08 09:17:06
等一下...至少在zlib和sqlite3的情況下,獲得原始導入庫不是更容易嗎? – 2009-10-09 14:21:02
sqlite只是一個人人都聽說過的例子。我知道原來的入口庫存在這個,但我想傳達的DLL(AddTwoNum.dll)沒有。 – 2009-10-09 18:43:52