我有 x64 本機 C++ 庫,必須將其傳遞給 C# 項目。我根據本教程構建了 C++/CLI 包裝器,一切正常。但是,該項目僅在 x86 架構上編譯。當我嘗試將本機 C++ 庫添加到項目時,我收到了運行時錯誤。項目不適用于 x64 架構,因為包裝器由于某些原因需要 x86。另一方面,它不適用于 x86,因為該庫需要 x64。一般來說,我對 C++/CLI、包裝器和 C# 的經驗很少,并且不太知道如何解決這個問題。當嘗試編譯解決方案時,我收到 runetime 錯誤System.BadImageFormatException: Could not load file or assembly 'Wrapper, Version=1.0.7178.20781, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was ma
de to load a program with an incorrect format..錯誤文檔鏈接這是我的包裝using namespace System;namespace CLI { template<class T> public ref class Wrapper { protected: T* m_Instance; public: Wrapper(T* instance) :m_Instance(instance) { } virtual ~Wrapper() { if (m_Instance != nullptr) { delete m_Instance; } } !Wrapper() { if (m_Instance != nullptr) { delete m_Instance; } } T* GetInstance() { return m_Instance; } };}...這是一個使用此包裝器的 C++/CLI 類//**********************header file***********************#include "Wrapper.h"#include "../Core/Core.h"using namespace System;namespace CLI{ public ref class Model : public Wrapper<Core::Impl> { public: Model(); bool test(); };//**********************Implementation******************************#include "Model.h"namespace CLI{ Model::Model() :Wrapper(new Core::Impl()) { Console::WriteLine("Creating new Impl-wrapper object!!"); } bool Model::test() { return m_Instance->test(); }}它與我使用的教程幾乎完全相同。我無法修改本機 C++ 庫,因此它必須在 x64 架構上工作。您能否向我解釋一下,為什么包裝器不想在 x64 上編譯,但在 x86 上完美運行,有沒有辦法解決這個問題。完美的答案將提供一個在 x64 架構上工作的 C++/CLI Wrapper 示例。提前致謝編輯,哦,我忘記添加我的項目的屬性了。操作系統為Win10 (x64);.NET 目標框架 4.5.1;Core項目(最底層項目,這里不介紹)構建為靜態.lib,Wrapper是動態.dll。VisualStudio 2017 v15.9.14
2 回答

森林海
TA貢獻2011條經驗 獲得超2個贊
仔細檢查您的項目設置,尤其是鏈接器。檢查鏈接器的命令行選項卡。最近我在其他選項中遇到了狂野的 X86 標志,這給了我類似的錯誤。
在高級中,檢查Target machine。
嘗試為鏈接器和編譯器啟用詳細輸出,并檢查是否出現 x86。
如果所有這些都被排除,請確保您的庫確實已編譯并且有效,例如。通過依賴步行器。

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
這可能是不正確的答案...但就我而言,我按照與您的 32 位應用程序(名為 Core)相同的指令創建了 C++/CLI 包裝器,之后我將應用程序更改為 64 位,我也有相同的錯誤。我的經驗是專門為 64 位 Core 應用程序創建一個新的 Wrapper 項目(我將所有 -h 和 -cpp 文件復制到新項目文件夾中,并添加到解決方案資源管理器中的項目中)。所以現在開始工作了。似乎在包裝 32 位 dll 后,建立了一些到 32 位系統庫的鏈接,但我在項目的屬性中看不到它。只有創建新項目對我有幫助。
- 2 回答
- 0 關注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消