在部件的创建、测试和调试过程中,有时会发现在试图运行测试工程时出现了以下错误消息:“与类型库或远程处理对象库的连接丢失,在对话框中选择“确定”删除引用。”
产生该错误的原因有两个:部件工程的类型库不可用;或者部件类型库的 GUID 改变了,测试工程无法确定其位置。关于 GUIDs 和类型库的详细信息请参阅“部件设计的一般准则”中的“多态性、接口、类型库和 GUIDs”。
部件工程中设置的“版本兼容”选项不同,解决办法也不同。可以在“属性”对话框的“部件”选项卡中找到“版本兼容”选项,该对话框可由“工程”菜单打开。
如“为进程外部件创建测试工程”所述,第一次把部件工程生成可执行文件(.Exe、.dll 或者 .ocx)时,Visual Basic 自动把“版本兼容”选项设为“工程兼容”,并向已生成的可执行文件中插入路径。这可以保证从一个开发任务转向另一个时,测试工程和部件仍能保持连接。
如果部件工程使用的是“工程兼容”,那么如何解决错误依赖于是在开发环境中调试部件还是要测试已生成的可执行文件。
如果是在开发环境的第二个实例中调试进程外部件(ActiveX Exe 工程),那么部件工程处于设计模式时,测试工程会丢失它的连接,因为此时部件工程的类型库不可用。
运行部件工程。切换回测试工程然后按 Esc 键关闭错误消息。这样就可以继续运行测试工程了。
注意 如果正在调试的进程内部件处于开发环境的独立的实例中,那么使用 ActiveX DLL 工程就可能会遇到这种情况。如调试一个提供 ActiveX 文档的进程内部件。
如果是第一次生成部件的可执行文件,或手工地从“不兼容”切换到“工程兼容”— 如本主题后面要介绍的那样,那么部件类型库的 GUID 将会发生改变,而测试工程将无法确定其位置。
在错误消息上单击“确定”打开“引用”对话框。在部件的后面会看到“丢失”。删除选中标志然后单击“确定”,清除丢失了的引用。在“工程”菜单中单击“引用”再次打开“引用”对话框。选中部件后单击“确定”。
为了在部件工程和已生成的可执行部件之间切换,必须生成可执行文件的最新版本,如“如何测试编译的部件”所述。如果没有这么做,可执行文件类型库的 GUIDs 和部件工程将不匹配,这样测试工程就无法找到可执行文件。
由部件生成可执行文件。切换回测试工程并按 ESC 键关闭错误消息。这样就可以运行测试工程了。
如果因为某些原因要在工程中使用“不兼容”选项,那么在每次关闭工程组(对于进程内部件)或工程(对于进程外部件)并重新打开它们时必须刷新引用。
要刷新测试应用程序对部件的引用,请按照以下步骤执行:
如果没有标志着“丢失”的项,那么就找到该部件工程(在“引用”对话框中的文件名和路径应该有扩展名 .vbp)并选中它,然后单击“确定”,跳到步骤 4。
如果没有显示部件工程,那么单击“确定”关闭对话框。
设置“工程兼容”最容易的方法是第一次生成部件的可执行文件(.Exe、.dll 或 .ocx)。如前面所介绍的,Visual Basic 会在第一次生成可执行文件时自动设置“工程兼容”。
如果因为某些原因工程被设置为“不兼容”,可以手工修改它为另两种“版本兼容”选项中的一种。“二进制兼容”是在开发已有部件的增强版时使用的选项,这在本章稍后的“版本兼容性”中介绍。
对于新的开发来说应该使用“工程兼容”。
此时,生成可执行文件的唯一目的是为了帮助测试工程保持对部件工程的引用。
注意 “工程兼容”选项实际上和“二进制兼容”选项(在“版本兼容性”中描述)无关。“工程兼容”更确切的叫法应该是“工程不兼容性”,因为每次编译工程时,Visual Basic 都会抛弃除了 GUID 以外的所有有关类型库的东西。
这是不是意味着要丢弃所有类 IDs 和接口 IDs 并重新生成呢?回答是肯定的。那么这会不会浪费 GUID 呢?这不用担心,因为即使每天做几千次这种操作,要用尽 GUIDs 也得几百万年。
详细信息 类型库和 GUID 在“部件设计的一般准则”的“多态性、接口、类型库和 GUIDs”中讨论。“调试进程外部件”则解释了关于调试的一些重要内容,比如在编辑测试工程时,必须让部件工程处于运行模式。