Как я могу перечислить свойства объекта программно в VB6? - PullRequest
2 голосов
/ 17 апреля 2010

Мой друг работает над старым проектом VB6. Я не прикасался к этому языку десять лет, поэтому я довольно ржавый. В любом случае, существует ли какой-либо вид API отражения для VB6? В частности, ему нужен способ итерации свойств (и типов) созданного пользователем класса. (Другими словами, не внешний COM-объект, а внутренний «модуль класса», как он называется.)

Как это можно сделать?

Ответы [ 2 ]

4 голосов
/ 17 апреля 2010

Jay's answer - это путь, если ваш проект - ActiveX (ActiveX EXE, DLL или OCX, в отличие от Standard EXE), и , если классы общедоступны. ,

Однако вы упомянули, что ваш друг хочет сделать это с «внутренними модулями класса». Я не уверен, что вы имеете в виду частные .cls файлы (классы) или .bas файлы (модули), но в любом случае вы можете использовать только библиотеку информационных объектов TypeLib для отражения публичные классы, пользовательские типы, константы или перечисления.

Вы не можете использовать библиотеку для отображения модулей, частных классов или чего-либо еще, что объявлено закрытым.

Как общее практическое правило, вы можете использовать отражение только тех вещей, которые вы видите в обозревателе объектов при просмотре содержимого вашего проекта из другого проекта. То есть, если вы скомпилируете свой проект, создадите новый проект, добавите первый проект в качестве ссылки, а затем просмотрите содержимое первого проекта в Обозревателе объектов, все, что вы можете увидеть в Обозревателе объектов, будет доступно через Библиотека информационных объектов TypeLib . Если что-то не указано в Обозревателе объектов, вы не сможете использовать Библиотеку информационных объектов TypeLib для ее отражения.

VB6 не имеет встроенной поддержки отражения во время выполнения или самоанализа. Использование библиотеки информационных объектов TypeLib для отражения работает для проектов ActiveX VB6, поскольку проекты ActiveX компилируются в COM-компоненты со встроенными библиотеками типов, но, как уже упоминалось, вы можете получить доступ только к тем типам данных, которые публично представлены в скомпилированных компонентах. библиотека типов. Использование Object Browser - это быстрый способ определить, что находится в библиотеке типов, потому что Object Browser фактически проверяет библиотеку типов компонента, чтобы заполнить то, что вы видите в Object Browser, пока вы просматриваете содержимое компонента из отдельный проект (если вы просматриваете компонент из его собственного проекта VB6, он будет отображать открытые и закрытые структуры данных, т.е. все, что видно в IDE).

2 голосов
/ 17 апреля 2010

Это то, что вы ищете:

Visual Basic: проверка компонентов COM с использованием библиотеки информационных объектов TypeLib

Это обсуждается в этой теме здесь на SO: Самоинспекция UDT VB6

Я никогда не пробовал это сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...