Как мне ссылаться на класс из проекта EXE? - PullRequest
6 голосов
/ 09 июля 2019

Мне поручено воскресить проект VB6, и прошло слишком много времени с тех пор, как я работал с VB6.

Вот моя проблема.

Проект A - это проект ActiveX EXE. В той же группе проектов есть еще один ActiveX EXE-проект; Проект B. Проект B содержит clsCommon (clsCommon.cls), который должен использовать проект A, например:

Private clsCommonA as ProjectB.clsCommon 

Когда я пытаюсь добавить выходной файл Project B (не vbp) к ссылкам проекта A, я получаю сообщение об ошибке Project 'Project B.vbd' can not be referenced because it's project type is EXE.

Может кто-нибудь напомнить, пожалуйста, как ссылаться на классы внутри EXE-файла? (У меня нет проблем со ссылками на классы в проектах в группе проектов, где выводом является ActiveX DLL)

Кстати: я предполагаю, что это даже возможно только потому, что какой-то разработчик 20 лет назад, очевидно, имел эту работу.

Ответы [ 2 ]

5 голосов
/ 10 июля 2019

VB6 не позволяет вам добавить ссылку на ActiveX Exe (ваш ProjectB) из проекта (ProjectA), который загружен в ту же IDE (группу проектов). Вы получаете сообщение об ошибке при попытке.

Это связано с тем, что ActiveX Exe запускается как отдельный процесс, который, как я полагаю, в среде IDE VB6 не подходит для отдельных проектов в группе. Так что, похоже, вы добавляете ссылку на ProjectB exe, так как она находится в группе, VB6 фактически добавляет ссылку на ProjectB vbp, что не поддерживается.

Вам необходимо удалить ProjectB из вашей группы. Затем вы сможете ссылаться на ProjectB Exe из IDE ProjectA.

Если вам нужно запустить ProjectB в IDE (для отладки или разработки), то сначала запустите VB6 и загрузите ProjectB. Затем запустите второй экземпляр VB6 и загрузите ProjectA. Когда вы запустите ProjectB, вы заметите, что ссылка в ProjectA меняется с ProjectB Exe на ProjectB vbp (работает во второй IDE). Установите точки останова в ProjectB соответствующим образом, затем, когда вы запустите ProjectA, создадите экземпляр ProjectB и сделаете вызовы метода, вы будете запускать код ProjectB в этой IDE.

3 голосов
/ 10 июля 2019

(ПРИМЕЧАНИЕ - я пересмотрел часть этого)


Что касается проектов VB6 внутри группы, вы должны иметь возможность добавлять взаимные ссылки на другие проекты в группе, используя обычные ссылкиокно, за исключением проектов EXE.

Я пробовал это с парой тестовых проектов EXE / DLL, и когда я пытаюсь добавить ссылку на EXE внутри группы, я получаю сообщение об ошибке:

enter image description here

(на test1.vbp нельзя ссылаться, поскольку тип его проекта - EXE.)


Однако я могу сослаться наскомпилированный EXE без проблем из проекта DLL.Это может быть вашим лучшим способом продвижения вперед.

Чтобы зарегистрировать скомпилированный EXE-файл, VB6 сделает это за вас, когда вы его скомпилируете, но был и ручной метод, который я в конце концов вспомнил - вам нужно запустить.EXE сам с помощью переключателя /regserver.

Предполагая, что ваш .VBP уже содержит правильные записи (в основном, ссылочная строка, которая указывает на GUID EXE и / или некоторых DLL и OCX файлов)как только вы это сделаете, это должно автоматически найти классы в EXE при компиляции / запуске.

Это описано в деталях несколькими другими вопросами SO, поэтому я не буду повторять все это:

и т. Д.


Если вам нужно отладить в EXE из группы DLL, сначала убедитесь, что все ссылки подключены,Затем вы сможете запускать проект EXE в IDE, устанавливать точки останова и запускать группу DLL отдельно в другом экземпляре IDE и выполнять отладку между ними.

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