2013-09-01 2 views
0

Я должен работать с Open CV, который можно запрограммировать на C++ и развернуть в приложении графического интерфейса .NET. Мне очень хотелось бы работать с C# для свойств интерфейса.C# и код C++ в том же приложении .NET?

Каков наилучший подход для этого?

+2

Первый результат из Google для «Open CV C#»: http://www.emgu.com/wiki/index.php/Main_Page Помогает ли это? – dtb

+1

Также вы можете изучить [C++/CLI] (http://en.wikipedia.org/wiki/C%2B%2B/CLI) управляемую версию C++, которая может быть весьма полезна для создания кода взаимодействия между родные C++ и C#. –

+0

Ага, я знаю о egmu CV, но я действительно не хочу использовать обертку. Можете ли вы объяснить немного больше или, возможно, ответить на любое простое приложение C++/CLI, @ChrisO – diegoaguilar

ответ

3

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

Простейший способ работы, где компоненты, которые должны быть записаны на C++ и C#, могут быть разделены так, что один компонент зависит от другого, но они не зависят друг от друга. В этом случае просто создайте две сборки, одну в C# и одну в VC++, а также ссылку на другую. Это самый простой способ сделать это, не в последнюю очередь потому, что он поддерживается в пользовательском интерфейсе Visual Studio.

Однако этот подход не будет работать, если существует взаимная зависимость, то есть класс A должен знать о классе B, а класс B должен знать о классе A, где класс A должен быть написан на C++ и классе B должен быть записан на C#. По-прежнему можно писать классы на разных языках, используя эту менее известную функцию .NET, называемую сборками с несколькими файлами или сетевыми модулями.

Для получения информации см. How to: Build a Multifile Assembly и Multifile Assemblies. Полезно помнить, что компилятор C++, как правило, более умный, чем другие. Кажется, я помню, что процедура заключалась в том, чтобы заставить C# скомпилировать свою половину в NetModule, а затем передать это компилятору и компоновщику C++, который мог бы связать его с частями C++ и создать окончательную сборку.

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

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