Неуправляемые статические библиотеки vC++ и приложение с графическим интерфейсом C#

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

Есть предложения? Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 634
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Есть хорошее введение в Википедия и много документации по MSDN.

Уловка также заключается в том, что приложение с графическим интерфейсом пользователя должно расширять некоторые объекты из этих статических библиотек, чтобы иметь возможность реагировать на некоторые методы обратного вызова, вызываемые из библиотек. Это сработает?

Ma99uS 07.10.2008 18:32

Управляемый класс не может наследовать напрямую от неуправляемого класса, но вы можете реализовать неуправляемые классы в своем приложении, которые наследуются от классов библиотеки и действуют как прокси для ваших управляемых классов.

Rob Walker 07.10.2008 18:37
Ответ принят как подходящий

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

Другие вопросы по теме