Неуправляемые статические библиотеки vc ++ и приложение C # GUI - PullRequest
1 голос
/ 07 октября 2008

В основном у меня есть куча неуправляемых статических библиотек VC ++. И приложение VC ++ GUI, которое использует те, и оно основано на MFC. Цель состоит в том, чтобы заменить приложение с графическим интерфейсом на приложение, созданное в C #, но используя все те же статические библиотеки. Вопрос в том, если это вообще возможно, и если да, то каков правильный способ сделать это?

Предложения, кто-нибудь? Благодарю.

Ответы [ 2 ]

2 голосов
/ 07 октября 2008

Да, возможно использование C ++ / CLI для управляемого кода C ++. Вы должны написать приложение WinForms на C ++ / CLI и просто добавить ссылку в статическую библиотеку, как обычно.

Однако, если между кодом GUI и библиотеками существует тесная связь, это может привести к некоторому беспорядку. Вам нужно будет позаботиться о преобразовании некоторых типов данных между управляемым и неуправляемым миром, особенно в строки. Если вам нужно передать управляемые объекты / массивы

Хорошее введение в Википедия и множество документации по MSDN .

1 голос
/ 07 октября 2008

Роб прав: вы можете сделать это полностью на C ++ / CLI, но мы сочли наиболее полезным заключить некоторые собственные классы в управляемый класс WinForms User Control. Этот управляемый класс содержал экземпляр нативного класса и не только упорядочивал данные, такие как строки в вызовах методов, но также преобразовывал нативные обратные вызовы (реализованные с boost :: signal) в события .NET. Полное решение для этого перевода сигнала-события изложено в этом вопросе . Пользовательский элемент управления .NET WinForms также перехватывал собственные исключения и перерабатывал их как управляемые исключения, а также выполнял некоторый перевод интерфейса не .NET (методы, возвращающие итераторы) в более интерфейс в стиле .NET, о котором вы можете прочитать в этот вопрос . Затем мы смогли использовать класс .NET непосредственно в приложении WPF. Обратите внимание, что если вы оберните его как класс .NET, он должен идти в DLL, которая будет использоваться из C #.

...