我对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 ++进行一些范式转换。似乎正在重新构建代码,就像引用的项目的源文件在我的项目文件夹中一样。
要使此功能起作用,有什么秘密开关?
最佳答案
您应该将../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 ++中,编译不是完全分开的,头文件在项目之间共享,并在使用它们的每个项目中重新编译。