如何从 EXE 项目中引用 class?

How do I reference a class from an EXE project?

我的任务是恢复一个 VB6 项目,我已经很久没有使用 VB6 了。

这是我的问题。

项目 A 是一个 ActiveX EXE 项目。在同一项目组中还有另一个 ActiveX EXE 项目;项目B。项目B包含项目A需要使用的clsCommon (clsCommon.cls),如:

Private clsCommonA as ProjectB.clsCommon 

当我尝试将项目 B 的输出 exe(不是 vbp)添加到项目 A 的引用时,出现错误 Project 'Project B.vbd' can not be referenced because it's project type is EXE.

有人可以提醒我如何在 EXE 中引用 类 吗? (我在输出为 ActiveX DLL 的项目组中的项目中引用 类 没有问题)

顺便说一句:我认为这甚至是可能的,因为 20 年前的一些开发人员显然已经成功了。

(注意 - 我已经修改了部分内容)


对于组内的 VB6 项目,您应该可以使用常用的引用 window 添加对组中其他项目的相互引用,EXE 项目除外。

我用一对测试 EXE/DLL 项目尝试过此操作,当我尝试在组中添加 EXE 引用时出现错误:

(test1.vbp工程类型为EXE,无法引用。)


但是我可以从 DLL 项目中毫无问题地引用已编译的 EXE。这可能是您前进的最佳方式。

为了注册已编译的 EXE,VB6 会在您编译时为您完成此操作,但还有一个我最终记住的手动方法 - 您需要 运行 .EXE本身使用 /regserver 开关。

假设您的 .VBP 已经有正确的条目(基本上,一个指向 EXE and/or 某些 DLL 和 OCX 文件的 GUID 的参考行)一旦您这样做应该会自动找到 类 在编译时的 EXE / 运行.

其他几个 SO 问题对此进行了详细描述,因此我不再重复所有内容:

等等


如果您需要从一组 DLL 调试到 EXE,首先要确保所有引用都已连接。那么你应该可以运行IDE中的EXE项目,设置断点,运行另一个IDE实例中的DLL组,并在它们之间进行调试。

VB6 不允许您从加载到同一 IDE(项目组)的项目 (ProjectA) 添加对 ActiveX Exe(您的项目 B)的引用。尝试时显示错误。

这是因为 ActiveX Exe 运行s 作为一个单独的进程,我相信 VB6 IDE 无法为组中的单独项目执行此操作。因此,虽然看起来您正在添加对 ProjectB exe 的引用,但由于它在组中,VB6 实际上正在添加对 ProjectB vbp 的引用,这是不受支持的。

您需要从您的组中删除 ProjectB。然后您将能够从 ProjectA IDE.

引用 ProjectB Exe

如果在IDE中需要运行ProjectB(用于调试或开发),则首先启动VB6并加载ProjectB。然后启动 VB6 的第二个实例并加载 ProjectA。当您启动 ProjectB 时,您会注意到 ProjectA 中的引用从 ProjectB Exe 更改为 ProjectB vbp(运行ning 在第二个 IDE 中)。根据需要在 ProjectB 中设置断点,然后当您启动 ProjectA 并实例化 ProjectB 并进行方法调用时,您将 运行 在 IDE.

中设置 ProjectB 代码