2010-07-29 47 views
0

我有幾個獨立的應用程序,我寫的都依賴於我自己和團隊編寫的dll。事情很好,當我們只有幾個DLL,但不是構建輸出目錄變得相當混亂,很難導航。我最終會希望有輸出build目錄包含以下結構:我將如何通知獨立應用程序的依賴DLL的位置?

  • $(OUTDIR)
    • - (Application.exe)
    • - (Application.exe)
    • --libs文件夾
      • - (LibA.dll)
      • - (LibB.dll)
      • (等)

有沒有辦法有應用程序看起來在「libs文件夾」的使用類似的清單文件,這些庫在運行時?

+0

也許你可以使用它? http://msdn.microsoft.com/en-us/library/aa365530%28VS.85%29.aspx – ereOn 2010-07-29 15:17:45

+0

@ereOn這可能會工作,但我試圖避免直接從Windows API調用任何東西。我們試圖儘可能地接近本地C++,因爲這也是爲了在unix上運行。 Linux方面覆蓋了ELF文件(根據我們的unix人)。使用Windows API會導致一些難看的#ifdef部分。 – JMcCarty 2010-07-29 15:29:15

+0

另請參閱我在http://stackoverflow.com/questions/3237642/中的答案 - 它解釋了Windows在何處查找DLL以及MSDN鏈接。 – MSalters 2010-08-02 08:29:06

回答

1

Dynamic-Link Library Search Order描述了你必須修改搜索路徑的可能性。它描述搜索順序,並提到manifestsSetDllDirectory()函數作爲更改搜索順序的可能性。

雖然SetDllDirectory看起來很有前途,但它只有在動態加載您的DLL時才能可靠地工作,而您根據我的理解卻無法做到這一點。現在

,如使用清單:約privatePath屬性Application Configuration Files會談可用於[指定]可能含有組件應用程序的基礎目錄的子目錄的相對路徑。這聽起來好像它只能用於並排組裝,但你可能想嘗試一下。

我會欣然承認我從來沒有與艙單(除非您需要在2005年VS知道得到任何運行在所有)困擾,我會建議跳過庫子目錄的想法隱含加載的DLL並把它們放在應用程序目錄中並完成它。對於明確(動態)加載的DLL,您可以從您的可執行文件路徑中推導完整路徑,並將其提供給LoadLibrary(),並且不需要打擾搜索路徑。

相關問題