2009-02-09 88 views
1

我正在使用舊版C++項目並且缺少第三方dll。我被告知該DLL將在兩週內上市。我需要執行的工作是純UI。我真的不需要這個DLL。但是,該應用程序不會運行沒有DLL。我是否應該註釋掉dll所調用的所有地方或創建佔位符DLL,無論哪種方式都有大量的API需要覆蓋?沒有人有更好的主意嗎?第三方DLL丟失了,我應該等待什麼?

回答

6

我會創建一個stub DLL,它不會執行任何操作(或只需要執行任何操作)。然後,當你得到真正的一個,把它放在你的存根上,你就完成了。

如果您需要創建一個zillion函數,您可能可以使用perl或其他一些腳本語言來幫助將您的鏈接器錯誤轉換爲包含您需要的函數原型的文件。

0

你不會走得太遠。有了這麼多的電話,寫封包是時間的一個不好的用法,除非你在監獄裏或什麼的。

您不能從正在運行的安裝中獲取DLL的副本?或者這是一個授權問題?

+0

監獄......真的嗎? – Aardvark 2009-02-10 14:23:20

1

編寫單元測試。否則,聽起來像是兩週的拇指旋轉。

-2

我,我會盡力在這裏複製.DLL許可和其他問題。除此之外找到另一個項目,我認爲...

3

如果您有權訪問EXE的源代碼(似乎是這樣),並且您正在運行任何最新的Visual Studio(6或更高版本),一個簡單的解決方案用/ DelayLoad重建。這意味着鏈接器將設置EXE來調用LoadLibrary並在第一次調用時解析導入。這意味着如果你實際上沒有調用這個DLL,它永遠不會被加載,並且通過擴展名不會丟失。

這意味着您不必創建任何存根DLL;這是一個5分鐘的變化。

1

我通常通過調用LoadLibraryGetProcAddress來動態加載不重要的DLL,這樣我的應用程序就可以在沒有它們的情況下運行。應用程序可以檢查DLL是否被加載,如果沒有,它不提供DLL提供的功能。我用拼寫檢查器,條形碼庫等等可能是需要考慮的事情。