2013-08-01 3 views
2

Я преобразовал управляемый проект C++ в C# one. Проект C++ включает в себя файл заголовков констант C++, который является внешней зависимостью, присутствующей вне проекта.Включая заголовочный файл C++ в файл C#

Во вновь созданном C#-файле есть ли способ включить этот заголовочный файл C++? Я не хочу переопределять эти константы в файле C#, так как изменения в клиентах будут происходить в заголовочном файле C++.

+0

Возможно, это невозможно. Хотя вы, вероятно, можете написать инструмент, который принимает эти файлы заголовков и генерирует исходный файл C#, необходимый при создании решения C#. –

+0

Я написал специальную утилиту, чтобы сделать это с помощью действия pre-build для обновления файла C#, когда файл C++ был изменен для некоторого кода, который должен был делиться константами между C# и неуправляемым кодом C++. Отлично. – pstrjds

+1

@JoachimPileborg: инструмент называется SWIG;) –

ответ

3

Невозможно включить его.

У вас есть 2 варианта действительно

  • дублировать его на управляемом уровне, и поддерживать его в синхронизации с заголовком C++.
  • прочитайте и проанализируйте его во время выполнения и используйте отражение в частях C#, которым требуются эти символы.

Как уже отмечалось другими, вы можете автоматизировать первый.

+0

Как вы поддерживаете его в синхронизации с заголовком C++? Вручную? –

+1

Я бы, вероятно, написал простой инструмент для чтения файла заголовка и выпустил файл C#, содержащий все объявления. –

+0

@jay_t - см. Комментарий Дэвида Хеффернана - именно это. – SteveLove

0

К сожалению нет, это невозможно, поскольку компилятор C# не понимает, что делать с файлами .h. Даже если это так, было бы незаконным иметь декларации переменных без ограничений (константа или иначе) в .NET.

Вам нужно будет преобразовать файл вручную или, как указано в комментарии Joachim Pileborg, создать утилиту для автоматического преобразования ее в код C# для вас.

2

Если у вас есть огромное количество файлов заголовков, вы можете посмотреть на SWIG: http://www.swig.org/

Это будет генерировать C# файлы из заголовочных файлов C/C++.

Для получения дополнительной информации см также: http://www.swig.org/Doc2.0/SWIGDocumentation.html#CSharp

Результаты впечатляют! Но именование больше похоже на C++, чем на C# ... но это ожидалось ...

Смежные вопросы