Объединение C ++ / CLR и C ++ - PullRequest
       2

Объединение C ++ / CLR и C ++

2 голосов
/ 04 декабря 2011

Я хочу включить сторонние библиотеки C ++ в мое приложение C ++ / CLI.

Каков стандартный метод (ы) для этого?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Я не знаю, существует ли такой стандарт, вы можете использовать библиотеки C ++ из приложения C ++ / CLI, как вы делаете это с приложениями C ++. Единственное, что я всегда пытаюсь сделать, - это обернуть 3-ю библиотеку за шаблон проектирования Proxy или Facade, чтобы клиент всегда работал с управляемыми классами. Это особенно важно, если ваше приложение C ++ / CLI является библиотекой, используемой другими приложениями .NET.

Пример:

// 3rd party header
class Value{};

// your C++/CLI app
#include <3rdpaty/Value.h>

public ref class ValueWrapper
{
public:
    // wrapper interface here

private:
    std::scoped_ptr<Value> value_;
};
1 голос
/ 04 декабря 2011

Это очень мало, C ++ / CLI был явно создан для поддержки этого сценария. Просто выберите шаблон проекта из узла CLR, чтобы начать. Вы должны указать компоновщику связать файлы .lib и #include заголовки в исходном коде C ++ / CLI.

Единственная проблема, с которой вы можете столкнуться, заключается в том, что заголовки #include могут содержать объявления, которые могут быть неправильно интерпретированы компиляторами C ++ / CLI. Объявления функций C, например. Лучше всего явно сообщить об этом компилятору. Как это:

#include "stdafx.h"
#pragma managed(push, off)
#include "3rdparty.h"
#pragma managed(pop)
#pragma comment(lib, "3rdparty.lib")
// Rest of your code

Комментарий #pragma в этом фрагменте указывает компоновщику также связать файл .lib сторонней библиотеки. Избавляет вас от необходимости делать это явно в настройке дополнительных зависимостей компоновщика.

Вот и все.

...