2010-08-25 119 views
14

我有一個C#2.0項目設置爲「任何Cpu」,但是它引用了一個C++項目,它構建了一個32位的dll。如何在64位項目中引用32位DLL?

當我嘗試在64位機器,我得到以下錯誤上運行我的程序:

System.BadImageFormatException was unhandled Message: Could not load file or assembly TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null or one of its dependencies. An attempt was made to load a program with an incorrect format.

我該如何解決這個問題?

更新

我希望能夠保持主體工程的任何CPU。

謝謝。

+0

請記住「任何CPU」的含義。 **您**聲稱主項目無處不在,這意味着**你**負責消除所有架構依賴。 – MSalters 2010-08-26 09:05:45

回答

13

如果您希望它在64位計算機上正確加載32位DLL,則需要將.NET項目構建爲32位(x86目標)。

RE:更新:

如果你想使你的項目爲「任何CPU」,你需要一個32位和DLL的64位版本,並確保適當的版本一起發行你的應用。如果無法將其他項目構建爲64位,則必須僅將.NET項目構建爲32位。

4

您將不得不強制您的EXE項目以32位模式運行,以便它可以使用該C++ DLL。項目+屬性,生成選項卡,平臺目標= x86。

1

你可能想看看這個article它解釋了爲什麼它不可能,簡而言之,因爲你在訪問非託管代碼時處理指針。

1

爲了讓您的主項目保持爲Any Cpu,您需要提供.dll的32位和64位版本 - 這應該是可能的,從您從源代碼構建它時就可以了。

然後,您需要提供一個清單指向它的可執行文件,以取決於平臺的權利dll verion。