Я почти ничего не знаю о 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): fatal error C1083: Cannot open include file: 'dp_all.h': No such file or directory
Э ... а? Я не пытаюсь компилировать библиотеку adept
. Это уже само по себе построено отлично. Я просто хочу скомпилировать свой собственный проект-оболочку. И файл dp_all.h
делает существует в той же папке, что и adept_provider.h
.
Ясно, что я не делаю некоторого сдвига парадигмы с C# на C++; похоже, что код перестраивается, как если бы исходный файл указанного проекта находился в моей папке проекта.
Какой секретный переключатель заставляет это работать?
@john Это на страницах свойств «Дополнительные # using директории»? Я добавил его туда, но он выдает ошибку компилятора, если я просто выполняю #include "adept_provider.h"
: No such file or directory
Нет, у меня сейчас нет под рукой копии Visual Studio, но это что-то вроде C++ / General / Additional Include Directories
Я только что проверил Project / Properties / Configuration Properties / C++ / General / Additional Include Directories, чуть выше дополнительных #using каталогов, как это происходит.
@john Ага, вот и все. Спасибо! Пожалуйста, превратите ваши комментарии в ответ, который я могу принять.
Вы должны добавить ../OtherLibrary/drm/adept/src
как одно из мест, где ваш проект ищет файлы заголовков (в C++ / Общие / Дополнительные подключаемые каталоги).
Вам следует сменить #include "../OtherLibrary/drm/adept/src/adept_provider.h"
на #include "adept_provider.h"
.
Что происходит, так это то, что компилятор ищет dp_all.h
относительно вашего проекта, а не другого проекта. В C++ компиляция не является полностью отдельной, файлы заголовков используются совместно между проектами и перекомпилируются в каждом проекте, в котором они используются.
Вы должны добавить
../OtherLibrary/drm/adept/src
как одно из мест, где ваш проект ищет файлы заголовков. И вам следует сменить#include "../OtherLibrary/drm/adept/src/adept_provider.h"
на#include "adept_provider.h"
. Что происходит, так это то, что компилятор ищетdp_all.h
относительно вашего проекта, а не другого проекта. В C++ компиляция не является полностью отдельной, файлы заголовков используются совместно между проектами и перекомпилируются в каждом проекте, в котором они используются.