1

在我的 Visual Studio 解决方案中,我有一个包含本机 C++ 代码的 dll、一个 C++/CLI dll,我试图在其中为我的非托管类型实现一个包装器,最后是我的 C# 应用程序。

我目前无法在我的包装 dll 中引用我的非托管类型。

代码片段:

// In the unmanged file (in the unmanged dll project)
using std::vector;
namespace populationwin32 
{
  class PopulationWin32
  {
  public:
    PopulationWin32();
  // ...
  };
}

// In the managed file. (in the manged dll project)
using namespace system;
using populationwin32::PopulationWin32;
namespace GSODFileParsing 
{
  public ref class PopulationWin32Wrapper
  {
  public:
    PopulationWin32Wrapper();
  private:
    PopulationWin32 *_populationWin32; // unmanaged object   
  }; // End class
} // End namespace

当我尝试编译托管 dll(包含包装器)时,出现以下错误:

Error   1   error C2653: 'populationwin32' : is not a class or namespace name
Error   2   error C2873: 'PopulationWin32' : symbol cannot be used in a using-declaration
Error   4   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   

任何想法这些错误意味着什么?我认为它们是因为没有正确链接到未管理的 dll,但我不确定如何执行此操作,并且我在网上找到的所有内容都有不同的说法。任何人都知道如何正确和完全地将未管理的库(dll 项目)与托管的 VC++/CLI 包装器库(dll 项目)链接起来吗?

注意:这两个库都是单个 Visual Studio 解决方案中的项目。

编辑:感谢我添加的 Olaf Dietsche 的评论

#include "PopulationWin32.h"

到包装头文件,但现在我收到以下错误:

错误 1 ​​错误 C1083:无法打开包含文件:'PopulationWin32.h':没有这样的文件或目录

是否有我缺少的设置或者我需要在两个 DLL 项目中包含头文件?顺便说一句,我通过属性->配置属性->链接器->输入->附加依赖项将未管理的 dll 输出 .lib 文件添加为托管 dll 的依赖项。

4

1 回答 1

1

你的第一个错误'populationwin32' : is not a class or namespace name意味着,编译器不知道这个命名空间。

添加一个

#include "PopulationWin32.h"

让 Visual Studio 知道这一点。

您还必须添加包含文件的路径,以便编译器可以找到它。例如,此处描述了VC++ 目录、项目和解决方案、选项对话框和此处的 #include 指令

于 2013-01-24T02:04:03.053 回答