在我的 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 的依赖项。