亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++/CLI 包裝器僅在 x86 機器上正常工作,我需要 x64 機器

C++/CLI 包裝器僅在 x86 機器上正常工作,我需要 x64 機器

C#
qq_笑_17 2023-09-24 11:09:12
我有 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。

如果所有這些都被排除,請確保您的庫確實已編譯并且有效,例如。通過依賴步行器。


查看完整回答
反對 回復 2023-09-24
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

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



查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號