Поиск циркулярных ссылок в VB6 - PullRequest
3 голосов
/ 20 июля 2011

Я пытаюсь скомпилировать некоторый код в VB6, и он говорит мне «Круговые зависимости между модулями».Он не сообщает мне, какие модули имеют эти зависимости.

Могу ли я найти дополнительную информацию о проблеме?

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

У вас есть проекты, которые образуют круговую цепочку ссылок. Используйте меню Project, а затем References, чтобы увидеть, на какие другие проекты вы ссылаетесь. Затем сделайте это для всех других проектов, которые являются частью приложения. Нарисуйте приблизительный график ссылок на что-нибудь, и в какой-то момент вы обнаружите, что ссылки возвращаются к одному из проектов.

Вам нужно только сосредоточиться на ссылках на проекты, которые вы создали сами. Также вам нужно будет проверить все проекты, которые вы создали, включая пользовательские элементы управления ActiveX. Это можно найти в меню Проект-> Компоненты.

Вероятно, вы обнаружите, что существует только несколько классов, на которые вы ссылаетесь. В этом случае вы можете разделить их на другую ActiveX DLL / библиотеку и сделать так, чтобы исходные проекты ссылались друг на друга.

Причина, по которой эта проблема возникает, заключается в том, что COM использует библиотеки типов, встроенные в библиотеку, для вызова классов и их методов. Библиотеки со ссылками включены в эту библиотеку типов способом, аналогичным включаемому файлу в C. Циркулярные ссылки не имеют «дна», поэтому COM не может добраться до самой нижней библиотеки, чтобы сформировать библиотеку типов.

0 голосов
/ 30 декабря 2014

Я обнаружил другую ситуацию, когда это подходит, и решение для этого.Если вы переименуете библиотеку (Имя проекта в Project / Properties) и передадите ссылки на объекты с полностью определенными именами типов, такими как:

Sub Example(ByVal myControl As Library.Classname)

Затем вам придется искать и заменять На (включая начальный пробел и конечную точку для предотвращения нежелательных совпадений).Сделайте это для расширений файлов FRM, BAS, CLS и CTL.

Sub Example(ByVal myControl As NewLibraryName.Classname)

Обратите внимание, что перед тем, как вы сможете сделать это, вы должны исправить файлы CTL и FRM, чтобы проект загружался в первую очередь.(прежде чем вы сможете получить ошибку циклической зависимости).Как и выше, этот процесс включает замену «Начать библиотеку».с "Begin NewName."

Наслаждайтесь!

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