Использование классов C ++ в .NET - PullRequest
1 голос
/ 20 мая 2010

У меня есть набор классов, которые я написал на C ++ для базы кода, которая будет работать в командной строке Linux.Они в основном используют STL и не имеют каких-либо необычных особенностей языка.Они были протестированы и работают.

Мне нужно написать приложение с графическим интерфейсом для .NET Framework, которое работает с использованием логики, написанной в этих классах, но работает в Windows.Критическим требованием для приложения Windows является то, что оно ведет себя точно , как и приложение Linux.Поэтому я хотел бы разделить код между двумя базами кода.

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

Мой вопрос как я могу использовать эти классы C ++ (с минимальными изменениями) в проекте .NET? Возможно ли это вообще?Могу ли я создать библиотеку или около того в .NET?

Примечание: мой опыт работы с .NET ограничен, поэтому я прошу прощения, если это вопрос новичка.

Ответы [ 3 ]

3 голосов
/ 20 мая 2010

Да, вы можете - вы можете использовать код C ++ (если он не зависит от функциональности, специфичной для Linux) в приложении .NET. C ++ / CLI - это расширенный набор C ++, предлагающий доступ к управляемым классам .NET и другим функциям. Возьмите ваш существующий код, создайте его как DLL (управляемый, если можете, неуправляемый, если нет), затем создайте части GUI, которые обращаются к нему.

1 голос
/ 20 мая 2010

Если вы спроектировали это хорошо, так что ваша логика состоит из относительно небольшого числа функций, которые не заботятся о GUI, то я предлагаю встроить логику в DLL, которую вы можете вызвать из вашего GUI.

Один из подходов состоит в том, чтобы представить группу «внешних C» функций, принимающих относительно простые типы параметров (например, целые и строковые, а не большие структуры, которые наследуют от других структур и т. Д.). Затем вы можете легко использовать P Вызвать (он же DllImport) для вызова этого кода прямо из вашего кода VB.NET. Между тем ваш код Unix также может вызывать те же функции в той же кодовой базе. Нет разветвления.

Если вам нужно передать более сложные типы параметров, то вы можете написать свой пользовательский интерфейс на C ++ / CLI (потому что он может просто включать заголовок и знать типы) или (так как история дизайнера довольно печальна для C ++ / CLI) напишите ваш пользовательский интерфейс в VB.NET и добавьте ссылку на оболочку C ++ / CLI, которая вызывает логику. В любом из этих случаев функции не обязательно должны быть «внешними C», если это упрощает вашу жизнь.

В любом случае, не копируйте всю свою бизнес-логику в новый файл VB.NET или C # или C ++ / CLI и продолжайте поддерживать раздвоенный код. Вы будете счастливы, сохраняя общее ядро ​​и подключаясь к нему.

1 голос
/ 20 мая 2010

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

...