用于C#用法的非托管C ++包装器

时间:2015-11-26 04:29:07

标签: c# c++ wrapper

已解决:感谢Casey Price的回答。然后我遇到了另外两个错误:BadImageFormatException和FileNotFoundException,前者通过匹配每个项目的平台目标(x64或x86)来解决,后者通过将C#项目的输出目录设置为包含dll文件的目录来解决

我正在开发游戏'引擎'目前有一个工作图形子系统绘制/纹理可移动模型。我正在尝试编写C ++ / CLR包装器,因此我可以在C#程序中使用该引擎(作为设计器工具)。

我的包装器项目是一个C ++ / CLR类库,包含以下2个文件(以及resource.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,它们指向引擎中的某些类。我已将错误包含在下面的文件中。

https://www.dropbox.com/s/ewhaas8d1te7bh3/error.txt?dl=0

我也会收到很多关于你可能会注意到的XMFLOAT / XMMATRIX的警告。

在所有引擎类中,我使用dllexport属性

class __declspec(dllexport) pEntry

我觉得我错过了这一点并且看到所有这些错误都做错了但是我还没有发现任何文件告诉我与我在这里做的事情有很大不同

1 个答案:

答案 0 :(得分:0)

你必须添加对你正在使用的游戏引擎的静态.lib文件的引用,以及它的dll或者手动加载dll

添加对.lib文件的引用,右键单击您的项目 - > Properties-> Linker->输入将lib文件添加到其他依赖项

另请参阅:DLL References in Visual C++