2013-08-02 56 views
0

我想從Visual Studio命令提示符調用lib.exe,以便我可以從.def文件生成.lib文件。當我運行此:試圖從Visual Studio命令提示符調用lib.exe

LIB.EXE/MACHINE:X86 /DEF:MyDLL.def

在我想導出我的功能使用,當我打電話給他們,從DLL中結束。我必須創建這個庫,因爲我有2個DLL,第一個調用第二個DLL。第二個我只有DLL本身,沒有頭文件或.cpp文件。我沒有.lib文件,因此我試圖創建一個。我使用這個工具expdef - def file generator來創建我的.def文件,並遵循這個tuoline:How To Create 32-bit Import Libraries Without .OBJs or Source,所以我可以建立庫文件。

我從命令提示符收到的錯誤是:

LINK:致命錯誤LNK1104:無法打開文件「MYDLL.DEF」

所以我已經嘗試過很多論壇和搜索搜索但找不到解決方案,爲什麼我看到這一點。

我已經在另一個論壇上發佈了this,它解釋了我完全想做的事情。

+0

可能的原因是一個導出的函數被轉發到wpdes32.dll。所以你必須先做一個。使用你無法獲得支持的DLL介於非法和非常不切實際之間。 –

+0

@HansPassant,對不起.def是MyDLL.def中的錯誤:LINK:致命錯誤LNK1104:無法打開文件'MyDLL.def' – user2577497

+0

混淆這些名稱並不能幫助我們幫助你。當然,聽起來你正在做一些非法的事情。 –

回答

1

另一個選項,如果你沒有和導出.lib DLL的是Win32 APIS LoadLibrary()和GetProcAddress()。使用被調用程序DLL的導出入口點的名稱,從調用者代碼調用這些API。鏈接第一個DLL時,根本不需要提及被調用DLL。

要獲取導出的入口點的名稱,可以在被調用程序DLL上使用類似「dumpbin/exports」或depend.exe的工具。

當然,您必須知道被調用入口點的簽名和任何其他假設,否則您將得到未定義的行爲。如果最壞情況發生,您可以通過調試來推斷這些情況。

+0

這似乎是我要去的路線。我已經能夠使用LoadLibrary()函數來添加DLL。我也使用GetProcAddress()來查找我的入口方法名稱,並在調試時確認EntryPoint地址與GetProcAddress()(使用Dependency Walker)相同,所以這很好。但是,我現在有緩衝區溢出錯誤,因此在我身邊,我需要找到原因。然而,你的建議適合我的問題,現在我需要爲新問題發佈一個新問題。非常感謝你的回答。 – user2577497

相關問題