用于 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++