Скомпилированные сборки .NET и классы Java содержат всю мета-информацию о классах и символах, которые они определяют.Ничего подобного файлам .h или .lib не требуется ссылаться на них.Для этих типов модулей может быть извлечено значительное количество информации непосредственно из них.
Я не знаю, является ли Visual Studio с использованием отражения для чтения метаданных из управляемых сборок, но отражение, безусловно, являетсяправильный механизм для применения в этом случае.Но также обратите внимание, что VS отображает больше информации, чем содержится непосредственно в сборке, а именно, ///
doc-comments.Они могут исходить из исходных файлов в других проектах решения и из отдельных файлов .XML, поставляемых со сборками.
Для C и C ++ дело обстоит иначе.В одной только DLL мало информации.Существуют символы экспорта, но они обычно не сигнализируют, является ли символ функцией или просто извлечением, и сколько аргументов и какие типы принимает функция.C ++ использует так называемые искаженные имена, из которых может быть получена некоторая информация.Но большая часть информации о библиотеке поступает из заголовочных файлов.Насколько я знаю, VS анализирует исходные файлы проектов и файлы .h, включенные в код, чтобы получить базу данных intellisense.Существуют макросы (#define
), а также встроенные и шаблонные классы и функции, которые вообще не отражаются в внешних символах DLL.
Как для управляемых, так и для неуправляемых сборок иногда доступны файлы PDB с отладочной информацией.Опять же, я не уверен, но я думаю, что VS не использует их для intellisense.Это не значит, что вы не должны.Там содержится расширенная информация о внешних переменных, классах, функциях и методах.В общем, нет «стандартного» подхода intellisense, и вам, вероятно, следует рассмотреть возможность использования нескольких источников для информации о символьных источниках.
К сожалению, я не очень разбираюсь в Java, чтобы дать подробный ответ на эту часть.вашего вопроса.Кроме того, существует популярная среда IDE под названием Eclipse, но я не заглянул за ее пределы.Там должно быть скрыто несколько интересных частей, но проведите собственное исследование.
Несколько полезных ссылок:
Visual Studio SDK .Даже если вы не расширяете визуальную студию, вы можете прочитать ее документацию.Есть раздел по Intellisense.Также обратите внимание на IDE с открытым исходным кодом, такие как Eclipse и #velop
Пространство имен System.Diagnostics.SymbolStore содержит классы для доступа к PDBфайлы.В неуправляемом мире используйте библиотеку DbgHelp , часть Windows SDK.
Утилита с именем Зависит от была частью Win32 SDK и доступнаотдельно сейчас.Он показывает внешние элементы, определенные неуправляемой DLL. Это обсуждение SO раскрывает несколько способов программного доступа к этой информации.DbgHelp содержит функции для удаления имен C ++ после их извлечения из директории экспорта PE.