2015-05-05 75 views
-3

Google'ing幾個小時後,我沒有解決這個問題的方法。DllImport沒有在SysWOW64文件夾中找到一個DLL

我開發了一個非託管C++的DLL。我已將該DLL放在SysWOW64文件夾中,因爲這是一個64位計算機。另一方面,我有一個在C#中開發的Winforms應用程序,用於導入DLL中包含的函數。我使用DllImport(「name.dll」),但會引發System.DllNotFoundException。

整個解決方案針對x64平臺進行配置。

如果我將DLL放在可執行目錄中,它就可以工作。

由於開發簡單,我想將DLL放在系統文件夾中。我正在用兩臺不同的電腦(一臺臺式電腦和筆記本)開發這個項目。個人電腦有32位平臺,而筆記本電腦是64位,具有不同的文件夾。

要在兩臺計算機中同步項目,我使用Subversion存儲庫。很明顯,我可以編寫一個Post Build事件來將DLL從C++項目文件夾複製到主可執行文件的輸出文件夾中,但是我每次從筆記本電腦移動到PC時都需要更改Post build命令,反之亦然。

任何想法爲什麼在系統文件夾中找不到DLL?最重要的是,有沒有辦法解決它?

由於 海梅

+1

如果解決方案編譯爲x64,則必須將該dll置於'%SystemRoot%\ System32'文件夾。 '%SystemRoot%\ SysWOW64 \'被32位應用程序(x86)使用 –

+0

當我使用%SystemRoot%\ System32時,系統實際上將該文件複製到SysWOW64中......似乎在內部,如果系統是x64,可能會自動將System32轉換爲SysWOW64,作爲一種別名 – jstuardo

回答

4

整個溶液被配置爲用於x64平臺。

SysWOW64實際上是32位系統目錄。對於32位程序,文件系統重定向器將重定向system32SysWOW64

  • 對於32位進程,系統目錄爲SysWOW64
  • 對於64位進程,系統目錄爲system32

這會解釋你面對的問題。

對於什麼是值得的,你真的不應該修改系統目錄。它屬於系統,應用程序不應修改它。

相關問題