2008-10-07 4 views
1

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

Предложения, никто? Спасибо.

ответ

1

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

2

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

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

Есть хорошее введение на Wikipedia и большое количество документации на MSDN.

+0

Уловка также заключается в том, что приложение GUI должно расширять некоторые объекты из этих статических библиотек, чтобы иметь возможность реагировать на некоторые методы обратного вызова, вызванные из библиотек. Будет ли это работать? – Ma99uS 2008-10-07 14:32:50