У меня есть неуправляемый класс, который я пытаюсь dllexport из управляемого файла DLL. Я пытаюсь использовать неуправляемый класс в другом управляемом файле DLL. Однако, когда я пытаюсь сделать это, я получаю ошибки ссылки .
Я делал это много раз с неуправляемыми файлами DLL, поэтому я знаю, как это работает. Я знаю, как использовать "public ref" и т. Д. В управляемых классах.
Есть ли где-нибудь флаг, который мне нужно установить? Или я должен сделать магию DllImport?
Это на .NET 2.0 и Visual Studio 2005 .
Вам необходимо использовать сборку взаимодействия для неуправляемых библиотек или компонентов COM. Вот ссылка с хорошей информацией об этом.
Если это файл COM DLL, то вы можете использовать совместимость COM .NET. Вопрос переполнения стека Есть ли лучший способ для доступа к собственным функциям COM C ++ для взаимодействия из C #? это еще один вопрос, который отвечает на это.
Если вы хотите использовать неуправляемый класс из управляемого кода, вы можете:
- Используйте несколько неприятных P / Invoke для загрузки функций-членов класса (конструктор, деструктор и т. Д.) И создайте более неприятный управляемый класс-обертку для вызова «настоящих» функций-членов. Это становится еще хуже, когда задействованы виртуальные методы.
- Второй вариант (который, на мой взгляд, лучше) - это написать класс-оболочку C ++ / CLI (вы упомянули, что вы знакомы с этим), который является простым прокси для неуправляемого класса. Для каждой функции-члена, которую вы используете в неуправляемом классе, у вас будет аналогичная функция в вашем прокси-классе. Тогда это простой случай добавления ссылки на эту DLL из вашего управляемого проекта, и вы сможете использовать свой класс как любой другой класс .NET. Примите во внимание, что вы столкнетесь с большим количеством работы, если ваш класс обнаружит другие неуправляемые вещи (те, которые не могут быть собраны).
Если вам нужна дополнительная информация по второму варианту, я мог бы найти несколько старых ссылок, которые более подробно объясняют эту технику.