C++/CLI 包装器只能在 x86 机器上正常工作,我需要 x64 机器

C++/CLI wrapper is working properly only on x86 machine, I need x64 machine

我有 x64 本机 C++ 库,我必须将其传递给 C# 项目。 我基于 this tutorial, 构建了 C++/CLI 包装器,一切正常。 但是,该项目只能在 x86 架构上编译。 当我尝试将该本机 C++ 库添加到项目时,我收到运行时错误。 项目不适用于 x64 体系结构,因为出于某些原因,包装器需要 x86。而且,另一方面,它不适用于 x86,因为该库需要 x64。

一般来说,我对 C++/CLI、包装器和 C# 的经验很少,而且我不太清楚如何解决这个问题。 尝试编译解决方案时,我收到运行时错误

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..

Link to error documentation

这是我的包装纸

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 class

//**********************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 架构上工作。 你能给我解释一下吗,为什么 wrapper 不想在 x64 上编译,但在 x86 上运行得很好,有没有办法解决这个问题。完美的答案将提供一个在 x64 架构上工作的 C++/CLI Wrapper 示例。 提前致谢

编辑, 哦,我忘了添加我的项目的属性。 OS 是 Win10 (x64); .NET 目标框架 4.5.1;核心项目(最底层项目,这里不展示)构建为静态.lib,Wrapper为动态.dll。 VisualStudio 2017 v15.9.14

仔细检查您的项目设置,尤其是链接器。检查链接器的 命令行 选项卡。最近我在 Additional options 中遇到了狂野的 X86 标志,这给了我类似的错误。

在高级中,勾选目标机器

尝试为链接器和编译器启用详细输出,并检查是否出现任何 x86。

如果排除所有这些,请确保您的库确实已编译并且有效,例如。通过依赖步行者。