用于 C# 用法的非托管 C++ 包装器
Unmanaged C++ wrapper for C# usage
已解决:感谢 Casey Price 的回答。然后我 运行 进入另外 2 个错误:BadImageFormatException 和 FileNotFoundException,前者通过匹配每个项目的平台目标(x64 或 x86)解决,后者通过将 C# 项目的输出目录设置为目录解决包含 dll 文件。
我正在开发一款游戏 'engine',该游戏目前有一个可用的图形子系统,该子系统 draws/textures 可移动模型。我正在尝试编写一个 C++/CLR 包装器,以便我可以在 C# 程序中使用该引擎(作为设计器工具)。
我的包装器项目是一个 C++/CLR class 库,包含以下 2 个文件(以及资源。h/cpp 和 Stdafx。h/cpp)
// pEngineWrapper.h
#pragma once
#define null NULL
#include "..\pEngine\pEntry.h"
using namespace System;
namespace pEngineWrapper
{
public ref class EngineWrapper
{
public:
EngineWrapper();
~EngineWrapper();
bool Initialise();
private:
pEntry* engine;
};
}
和 .cpp 文件
// This is the main DLL file.
#include "stdafx.h"
#include "pEngineWrapper.h"
pEngineWrapper::EngineWrapper::EngineWrapper()
{
engine = null;
}
pEngineWrapper::EngineWrapper::~EngineWrapper()
{
delete engine;
engine = null;
}
bool pEngineWrapper::EngineWrapper::Initialise()
{
bool result;
engine = new pEntry;
result = engine->Initialise();
if( result == false )
{
return false;
}
return true;
}
当我去构建这个项目时,我遇到了 14 个错误:LNK2028、LNK2019 和 LNK2001,它们指向引擎中的一些 classes。我已将错误包含在下面的文件中。
https://www.dropbox.com/s/ewhaas8d1te7bh3/error.txt?dl=0
我也收到了很多关于 XMFLOAT/XMMATRIX 的警告,您可能会注意到。
在所有引擎中 classes 我使用 dllexport 属性
class __declspec(dllexport) pEntry
看到所有这些错误,我觉得我没抓住要点,做错了,但我没有找到任何文件告诉我与我在这里所做的有很大不同
您必须为正在使用的游戏引擎及其 dll 添加对静态 .lib 文件的引用,或者手动加载 dll
要添加对 .lib 文件的引用,请右键单击您的项目->属性->链接器->输入将 lib 文件添加到附加依赖项
另请参阅:DLL References in Visual C++
已解决:感谢 Casey Price 的回答。然后我 运行 进入另外 2 个错误:BadImageFormatException 和 FileNotFoundException,前者通过匹配每个项目的平台目标(x64 或 x86)解决,后者通过将 C# 项目的输出目录设置为目录解决包含 dll 文件。
我正在开发一款游戏 'engine',该游戏目前有一个可用的图形子系统,该子系统 draws/textures 可移动模型。我正在尝试编写一个 C++/CLR 包装器,以便我可以在 C# 程序中使用该引擎(作为设计器工具)。
我的包装器项目是一个 C++/CLR class 库,包含以下 2 个文件(以及资源。h/cpp 和 Stdafx。h/cpp)
// pEngineWrapper.h
#pragma once
#define null NULL
#include "..\pEngine\pEntry.h"
using namespace System;
namespace pEngineWrapper
{
public ref class EngineWrapper
{
public:
EngineWrapper();
~EngineWrapper();
bool Initialise();
private:
pEntry* engine;
};
}
和 .cpp 文件
// This is the main DLL file.
#include "stdafx.h"
#include "pEngineWrapper.h"
pEngineWrapper::EngineWrapper::EngineWrapper()
{
engine = null;
}
pEngineWrapper::EngineWrapper::~EngineWrapper()
{
delete engine;
engine = null;
}
bool pEngineWrapper::EngineWrapper::Initialise()
{
bool result;
engine = new pEntry;
result = engine->Initialise();
if( result == false )
{
return false;
}
return true;
}
当我去构建这个项目时,我遇到了 14 个错误:LNK2028、LNK2019 和 LNK2001,它们指向引擎中的一些 classes。我已将错误包含在下面的文件中。
https://www.dropbox.com/s/ewhaas8d1te7bh3/error.txt?dl=0
我也收到了很多关于 XMFLOAT/XMMATRIX 的警告,您可能会注意到。
在所有引擎中 classes 我使用 dllexport 属性
class __declspec(dllexport) pEntry
看到所有这些错误,我觉得我没抓住要点,做错了,但我没有找到任何文件告诉我与我在这里所做的有很大不同
您必须为正在使用的游戏引擎及其 dll 添加对静态 .lib 文件的引用,或者手动加载 dll
要添加对 .lib 文件的引用,请右键单击您的项目->属性->链接器->输入将 lib 文件添加到附加依赖项
另请参阅:DLL References in Visual C++