我有一个旧的VB6项目,它由一些DLL,OCX和GUI组成。
有一个GUI组件,其中包含此组件的VBP文件:
Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\SysWOW64\stdole2.tlb#OLE Automation
Object={EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}#1.1#0; ieframe.dll
Object={3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}#4.0#0; mshtml.tlb
Reference=*\G{64E54C86-D847-48F7-9AE5-D6C9B8E6A3A2}#3.0#0#..\..\bin\Crypt.dll#Crypt
Reference=*\G{B3E7F95C-B6D9-458E-B4D4-5272759B139A}#4.0#0#..\..\bin\SpeechMike.dll#SpeechMike_DLL
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
Object={AB4F6C60-4898-11D2-9692-204C4F4F5020}#29.0#0; Ccrpsld.ocx
Object={48E59290-9880-11CF-9754-00AA00C00908}#1.0#0; msinet.ocx
Object={9C526969-AA6E-4D61-BAFA-117FD20C2B38}#3.0#0; SpeechMike.ocx
参考 设置很痛苦,因为它们总是从一台机器更改为另一台机器。我的意思是,GUID'9C526969-AA6E-4D61-BAFA-117FD20C2B38',作为一个例子的最后一个,将在我的系统上,但在其他人的机器上的其他东西。
目前,为了使其工作,我删除了对Crypt.dll和SpeechMike.dll的引用。还有Object SpeechMike.ocx。否则,Visual Studio会查找不存在的内容。然后在“project> references”中检查Crypt和SpeechMike, Reference 返回到具有正确GUID和版本的VBP。最后,在'项目>组件'我添加了OCX,我很高兴。
我错了吗?如何在不通过环形和循环来启动项目的情况下与其他人共享项目?
我正在使用MS Visual Basic 6(VS 6企业的一部分)。
答案 0 :(得分:9)
这听起来像“未能保持二进制兼容性”。通常你只对自己这样做,但是如果有多个人从源项目文件中编译你的库,那当然会让你头疼。
创建ActiveX EXE,DLL和OCX时,需要创建一个“基础”版本,其中分配了类型和类ID值(GUID)。文档甚至建议您执行此操作,将过程留空:只需注释行或其他内容,以便IDE不会删除空声明。
您不必使用“空”基本参考库,它可以是包含完整代码的库。
编译完该基线库后,您将退出并保存您的项目。然后将此“空”库重命名为其他内容,并将其与项目源文件一起保存。
在此之后,重新打开项目并进入“项目属性”,在“组件”选项卡上将“兼容性”设置更改为“二进制兼容性”,然后在框中输入已编译基线库的完整路径和名称。保存项目。现在您可以添加代码并编译其他程序使用的“真实”库。
当您将这些库(DLL,OCX)以源代码格式分发给其他人以便他们可以编译它们时,您必须提供此重命名的编译基线库以及源代码文件,VBP文件,资源文件等。
从那里你的GUID将保持稳定,直到你改变破坏二进制兼容性的东西(改变方法的参数列表等)。
在线帮助(MSDN Library)中有更多详细信息。参见: