首页 > 解决方案 > Visual C++ 项目参考的新手帮助

问题描述

我对 C++ 几乎一无所知,只是我缺少获取别人的 C++ 库并将其包装以供 C# 使用。我发现了一些关于如何做到这一点的帖子,我正在一点一点地去那里。但我在这一点上碰壁了。

根据这篇文章,我应该创建一个新的托管 C++ 项目。我已经这样做了,并且我添加了对我应该包装的项目的引用。所以我的代码如下所示:

#include "stdafx.h"
#include "DrmWrapper.h"
#include "../OtherLibrary/drm/adept/src/adept_provider.h"

DrmWrapper::DrmWrapper(dpdrm::DRMProcessorClient * client, dpdev::Device * device)
{
    adept::DRMProviderImpl * provider = new adept::DRMProviderImpl();
    drm_processor_ = provider->createDRMProcessor(client, device);
}

unsigned DrmWrapper::initSignInWorkflow(unsigned workflows, const dp::String& authProvider, const dp::String& username,
    const dp::String& password)
{
    return drm_processor_->initSignInWorkflow(workflows, authProvider, username, password);
}

一切看起来都不错。但是当我尝试编译我的包装项目时,我得到一个错误:

d:\src\drm-wrapper\OtherLibrary\drm\adept\src\adept_provider.h(26):致命错误 C1083:无法打开包含文件:'dp_all.h':没有这样的文件或目录

呃……什么?我不是要编译adept库。这本身就已经很好了。我只想编译我自己的包装项目。并且该dp_all.h文件确实存在,与adept_provider.h.

显然,我没有从 C# 到 C++ 进行一些范式转变;似乎正在重建代码,就好像引用的项目的源文件在我的项目文件夹中一样。

让这个工作的秘密开关是什么?

标签: c++c++-cli

解决方案


您应该将其添加../OtherLibrary/drm/adept/src为项目查找头文件的位置之一(在 C++/General/Additional Include 目录中)。

您应该更改#include "../OtherLibrary/drm/adept/src/adept_provider.h"#include "adept_provider.h".

发生的事情是编译器正在寻找dp_all.h相对于您的项目而不是其他项目。在 C++ 中编译不是完全独立的,头文件在项目之间共享,并在使用它们的每个项目中重新编译。


推荐阅读