Как использовать неуправляемый класс из управляемой DLL в .NET? - PullRequest
1 голос
/ 23 марта 2009

У меня неуправляемый класс , который я пытаюсь выполнить dllexport из управляемого файла DLL. Я пытаюсь использовать неуправляемый класс в другом управляемом файле DLL. Однако, когда я пытаюсь сделать это, я получаю link error.

Я делал это много раз с неуправляемыми файлами DLL, поэтому я знаю, как это работает. Я знаю, как использовать "public ref" и т. Д. В управляемых классах.

Есть ли где-нибудь флаг, который мне нужно установить? Или я должен сделать магию DllImport?

Это на .NET 2.0 и Visual Studio 2005 .

Ответы [ 3 ]

3 голосов
/ 23 марта 2009

Если вы хотите использовать неуправляемый класс из управляемого кода, вы можете:

  1. Используйте некоторые неприятные P / Invoke для загрузки функций-членов класса (конструктор, деструктор и т. Д.) И создайте более неприятный управляемый класс-обертку для вызова "реальных" функций-членов. Это становится еще хуже, когда задействованы виртуальные методы.
  2. Второй вариант (который, на мой взгляд, лучше) - написать класс-оболочку C ++ / CLI (вы упомянули, что вы знакомы с этим), который является простым прокси для неуправляемого класса. Для каждой функции-члена, которую вы используете в неуправляемом классе, у вас будет аналогичная функция в вашем прокси-классе. Тогда это простой случай добавления ссылки на эту DLL из вашего управляемого проекта, и вы сможете использовать свой класс как любой другой класс .NET. Примите во внимание, что вы столкнетесь с большим количеством работы, если ваш класс обнаружит другие неуправляемые вещи (те, которые не могут быть собраны).

Если вам нужна дополнительная информация по второму варианту, я мог бы поискать несколько старых ссылок, которые более подробно объясняют эту технику.

1 голос
/ 23 марта 2009

Вам необходимо использовать сборку взаимодействия для неуправляемых библиотек или компонентов COM. Вот ссылка с хорошей информацией об этом.

0 голосов
/ 23 марта 2009

Если это файл COM DLL, то вы можете использовать совместимость COM .NET. Вопрос переполнения стека Есть ли лучший способ для доступа к собственным функциям COM C ++ для взаимодействия из C #? - это еще один вопрос, который отвечает на этот вопрос.

...