我对C ++几乎一无所知,只不过我缺少将别人的C ++库打包并供C#使用的方法。我找到了一些有关如何执行此操作的帖子,而我正在一步一步地走到那里。但是我现在碰壁了。
根据this post,我应该创建一个新的托管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 ++进行一些范式转换;好像正在重建代码,就像引用的项目的源文件在我的项目文件夹中一样。
要使它正常工作,秘密开关是什么?
答案 0 :(得分:2)
您应该添加../OtherLibrary/drm/adept/src
作为项目查找头文件的位置之一(在C ++ / General / Additional Include Directories中)。
您应将#include "../OtherLibrary/drm/adept/src/adept_provider.h"
更改为#include "adept_provider.h"
。
正在发生的事情是,编译器正在寻找相对于您的项目而不是相对于其他项目的dp_all.h
。在C ++中,编译不是完全分开的,头文件在项目之间共享,并在使用它们的每个项目中重新编译。