有一个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企业的一部分).
这听起来像“无法保持二进制兼容性”.通常你只对自己这样做,但是如果有多个人从源项目文件中编译你的库,那么当然会让你头疼.当您创建ActiveX EXE,DLL和OCX时,您需要创建一个“基础”版本,其中分配类型和类ID值(GUID).文档甚至建议您执行此操作,将过程留空:只需注释行或其他内容,以便IDE不会删除空声明.
您不必使用“空”基本参考库,它可以是包含完整代码的库.
编译完该基线库后,您将退出并保存项目.然后将此“空”库重命名为其他内容,并从那里将其与项目源文件一起保存.
在此之后,重新打开项目并进入项目属性,在“组件”选项卡上将“兼容性”设置更改为“二进制兼容性”,然后在框中输入已编译基准库的完整路径和名称.保存项目.现在您可以添加代码并编译其他程序使用的“真实”库.
当您将这些库(DLL,OCX)以源代码形式分发给其他人以便他们可以编译它们时,您必须提供此重命名的编译基线库以及源代码文件,VBP文件,资源文件等.
从那里你的GUID将是稳定的,直到你改变破坏二进制兼容性的东西(改变方法的参数列表等).
有关详细信息,请参阅联机帮助(MSDN Library).看到:
Using Visual Basic|Component Tools Guide|Creating ActiveX Components|Debugging, Testing, and Deploying Components|Version Compatibility in ActiveX Components