Использование неуправляемого кода из управляемого кода - PullRequest
6 голосов
/ 20 марта 2010

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

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

Ответы [ 2 ]

5 голосов
/ 20 марта 2010

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

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

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

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

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

Редактировать: Другая идея

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

3 голосов
/ 20 марта 2010

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

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

Достойный учебник по C ++ / CLI и подходу обертки доступен здесь .

...