Использование неуправляемого кода из управляемого кода

Мне разработали мой проект в MFC, который является кодом unmnaged. Теперь я должен создать подобное приложение в C# путем многократного использования большинства классов MFC.

Действительно ли возможно непосредственно экспортировать класс/структуру/перечисление из MFC dll, так, чтобы я мог импортировать его в своем C# с помощью dllimport и использовать его.?

6
задан Harsha 20 March 2010 в 04:41
поделиться

2 ответа

Да, это вполне возможно. Просто нужно быть осторожным с типами. Многие переводят очень красиво, но некоторые необычны.

Название концепции, которую вы ищете, - COM-взаимодействие. См. Здесь руководство по началу работы. Конечно, MFC DLL должна поддерживать COM, чтобы быть доступной из .NET. Вам необходимо перестроить ваши библиотеки DLL MFC с соответствующими поддерживаемыми интерфейсами COM.

Вот обзор MSDN COM Automation со ссылками на примеры проектов.

А вот простой, но точный пример CodeProject , который демонстрирует, как именно COM-библиотеки можно использовать из сборок .NET.

Отличная ссылка здесь. Также для доступа к собственным API Win32.

Изменить: Другая идея

Если вы не можете перестроить свои библиотеки DLL MFC (у вас нет исходного кода или правильной версии IDE) вы можете создать DLL-оболочку COM в MFC или необработанном C / C ++, которая будет импортировать библиотеки DLL MFC стандартным способом, предшествующим COM, а затем выставлять объекты и методы, которые вам нужны.

5
ответ дан 16 December 2019 в 21:37
поделиться

Вы не можете использовать классы MFC [DllImport], это работает только для статических функций. Превратить их в классы COM возможно только технически, операция сложная. Лучший способ сделать это - написать оболочки управляемых классов на языке C ++ / CLI. Вы должны написать класс ref для каждого класса MFC. Он хранит указатель на объект класса MFC, каждый метод напрямую вызывает соответствующий метод класса MFC. В подавляющем большинстве случаев это одна строка кода.

Это очень механический процесс, вы можете использовать SWIG , чтобы выполнить эту работу за вас. Не уверен, насколько он хорош, сам никогда не использовал.

Хорошее руководство по C ++ / CLI и подходу с оболочкой доступно здесь .

3
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: