我有一个旧的VB6项目,它由几个DLL、OCX和GUI组成。
在它的VBP文件中包含了一个GUI组件:
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的引用。也是对象SpeechMike.ocx。否则,Visual将查找不存在的内容。然后,在“项目>引用”中,我检查Crypt和SpeechMike,而引用则返回到带有正确GUID和版本的VBP。最后,在“项目>组件”中,我添加了OCX,然后就可以开始了.
我是不是弄错了?我如何与其他人共享这个项目,而不通过循环和循环来启动项目呢?
我正在使用6( VS 6企业的一部分)。
发布于 2013-04-11 23:27:09
这听起来像是“维护二进制兼容性失败”。通常,您只对自己这样做,但当然,如果有多个人从源项目文件中编译您的库,则可能会更令人头痛。
当您创建ActiveX EXEs、DLL和OCX时,您需要创建一个“基本”版本,在该版本中分配类型和类ID值。文档甚至建议您这样做,将过程保留为空:只是一个注释行或什么的,这样IDE就不会删除空声明。
您不必使用“空”基引用库,它可以是一个包含完整代码的库。
一旦编译了这个基线库,就可以退出并保存您的项目。然后将这个“空”库重命名为其他库,然后将其与您的项目源文件一起保存。
在此之后,您将重新打开Project并进入Properties,并在Component选项卡上将兼容性设置更改为二进制兼容性,并在该框中输入编译后的基线库的完整路径和名称。拯救这个项目。现在您可以添加代码并编译其他程序要使用的“真实”库。
当您以源代码形式将这些库(DLL、OCX)分发给其他人以便它们能够编译时,您必须提供这个重命名的已编译基线库以及源代码文件、VBP文件、资源文件等。
从那里开始,您的GUID将是稳定的,直到您更改了一些破坏二进制兼容性的内容(更改方法的参数列表等)。
在联机帮助(MSDN库)中有关于此的更多详细信息。请参见:
http://msdn.microsoft.com/en-us/library/aa733715(v=vs.60).aspx
https://stackoverflow.com/questions/15959394
复制相似问题