Как создать интерфейс в C # или VB с помощью C ++ Logic - PullRequest
1 голос
/ 04 ноября 2011

У меня вопрос, как лучше всего создать интерфейс с кодом C ++.

По сути, до сих пор у меня есть консольный проект на c ++, который работает так, как я ожидаю, но теперь я хочу создать графический интерфейс для него. Мне показалось, что выбор:

  1. Создайте dll из проекта c ++, а затем создайте форму C #, которая использует dll для выполнения логики.

  2. То же, что 1, но с VB.

  3. Используйте QT или что-то подобное и сделайте интерфейс в том же проекте.

Я довольно долго пробовал вариант 1. Я сделал библиотеку, в которую я верю, успешно, создав проект библиотеки в Visual Studio 2005. Затем я поместил ее в свой проект на c #, но у меня возникла проблема с возможностью мгновенного определения класса, но проект c # не мог видеть мои методы.

Единственное исправление, которое я смог найти, - это использование ключевого слова ref. Проблема с этим заключалась в невозможности смешать управляемый и неуправляемый код, и попытка выполнить это на одном из больших классов вызвала около 250 ошибок.

Вариант 2 У меня была такая же проблема.

Я начну вариант 3, если понадобится, я просто подумал, упустил ли я что-нибудь фундаментальное или какие-либо предложения в целом?

Ура за чтение.

1 Ответ

2 голосов
/ 04 ноября 2011

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

Если вы пытаетесь использовать существующую библиотеку C ++из .NET одним из самых простых способов сделать это является использование C ++ / CLI в качестве оболочки вокруг вашей неуправляемой библиотеки.C ++ / CLI компилируется в байт-код .NET, но имеет много автоматического неуправляемого взаимодействия.Фраза, которая часто всплывает при использовании неуправляемого взаимодействия C ++ / CLI: «это просто работает».Это точная фраза.

Если у вас есть оболочка C ++ / CLI для вашего неуправляемого кода, C # сможет видеть все, что доступно вашей библиотеке C ++ / CLI.

...