Подтвердить что ты не робот

Автоматически создавать класс оболочки С# из dll в Visual Studio 2010 Express?

Мне сказал мой коллега, что Visual Studio позволяет указывать на .dll и автоматически создавать магический класс оболочки С#. Это действительно возможно? И если да, то как это можно достичь? Я просматривал веб-страницы, но ничего не смог придумать!

Спасибо всем!


Поняв, что я тоже буду делиться этими ресурсами,

4b9b3361

Ответ 1

3 случая:

  • DLL представляет собой управляемую сборку = > вы напрямую ссылаетесь на нее в своем проекте и используете ее
  • DLL представляет COM-объект = > вы можете использовать утилиту tlbimp.exe для создания управляемой оболочки
  • DLL представляет собой неуправляемую библиотеку с некоторыми экспортируемыми функциями. Это самый жесткий. Нет инструментов. Вам нужно будет проконсультироваться с документацией библиотеки, чтобы узнать имена экспортируемых функций и параметры и создать управляемые обертки P/Invoke. Вы можете использовать утилиту dumpbin.exe, чтобы просмотреть список экспортируемых функций. Здесь статья в MSDN о различных шагах.

Ответ 2

Это невозможно с любой DLL. Просто очень специфический вид, который реализует COM-сервер. Конвертер нуждается в хорошем описании экспортируемых типов, которые предоставляются для таких серверов библиотекой типов.

Библиотека типов является точным эквивалентом метаданных в управляемой сборке. Хотя он запускает жизнь как отдельный файл, файл .tlb, он часто внедряется как ресурс в DLL. Хорошее место для этого, хранит описания типов близко к коду, который его реализует. Также как метаданные в сборке .NET.

Некоторые инструменты для воспроизведения, чтобы увидеть библиотеки типов (не уверен, работает ли это в Express): в Visual Studio используйте File + Open + File и выберите, скажем, c:\windows\system32\shell32.dll. Вы увидите ресурсы в этой DLL, обратите внимание на TYPELIB node. Это библиотека типов. Это двоично, поэтому на самом деле чтение это непрактично. Для этого запустите OleView.exe из командной строки Visual Studio. File + View Typelib и выберите одну и ту же DLL. Это декомпилирует библиотеку типов обратно в IDL, интерфейс описания интерфейса, который изначально использовался для создания библиотеки типов. Очень читаемый, у вас мало проблем с пониманием языка. И можно легко увидеть, как .NET Tlbimp.exe может перевести эту библиотеку типов в эквивалентные объявления С#.

Библиотеки типов старые, они существуют с 1996 года. Первоначально разработанная командой Visual Basic в Microsoft, в качестве замены для VBX, 16-разрядной модели расширяемости VB. Они были очень успешными, практически любой компилятор Windows поддерживает их. Но они ограничены в выразительной силе, нет поддержки таких вещей, как дженерики и наследование реализации. Примечательно, что команда Windows 8 заменила библиотеки типов для WinRT. Они выбрали формат метаданных .NET.