我有 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
森林海
哔哔one
相关分类