我写了一个control类型的工程,新建了一个exe工程测试,将control工程加入到exe工程中,这是发现control工程就不能编译了 ,报错是队ocx的访问被拒绝,这说明exe工程是引用的ocx控件而非工程,而且单独编译control工程生成的ocx在使用中报错,错误原因是“不支持设计和编译时的组件交互”,请问这是什么原因,我原来加入工程到另外一个工程当中时控件工程的编译不会受到影响,请各位大虾执教

解决方案 »

  1.   

    增强软件部件时,Visual Basic 提供了两种保持向后兼容的机制— 即“版本兼容”特性和 Implements 特性。版本兼容性
    对于用早期版本编译的程序,Visual Basic 的“版本兼容”特性可以在保持向后兼容的同时增强部件。“属性”对话框“部件”选项卡的“版本兼容”包含三个选项: “不兼容”:每次编译部件时都会生成新的类型库,包含新的类 ID 和新的接口 ID。在部件的各个版本之间没有任何关系,使用某一版本编译的程序无法使用以后的版本。
    “工程兼容”:每次编译部件时都会生成新的类型库— 但类型库的标识符将保留,这样测试工程能够保留对部件工程的引用。所有来自以前版本的类 ID都保留;只有对同以前版本不再二进制兼容的类才更改接口 ID。 
    注意 这是 Visual Basic 5.0 的工程兼容的改变,如果任意一个类不再是二进制兼容了,那么该工程所有的类 ID 和接口 ID 都将改变。重点 在释放部件的兼容版本方面,“工程兼容”和“不兼容”一样。“二进制兼容”:当您编译工程时,如果检测到任何二进制不兼容的更改,将会为您显示一个对话框。如果您选择接受警告,部件将保留类型库标识符和类 ID。只有对不再是二进制兼容的类,才更改接口 ID。这同工程兼容性的行为相同。 
    然而,如果您选择忽略警告,部件也会保留接口 ID。只有在当编译器决定更改是在过程 ID 中,或是一个方法的签名,该选项才可用。小心 如果您绝对肯定所做的修改不会影响兼容性,那么应该只选择“忽略”按钮。如果您不是绝对的肯定,请选择安全的做法并且选择“Accept”按钮,以允许接口 ID 能够被更改。重点   违反编译器警告的选项代表了一个从 Visual Basic 5.0 的更改。在继续进行该选项之前,对不兼容更改的含义有全面的了解是非常重要的。
    注意 谈论“版本兼容”时,通常是指“二进制兼容”。下面介绍如何适当使用这些选项。使用 Implements 语句实现兼容性
    Implements 语句允许向类模块中增加多个接口,这在《Visual Basic 程序员指南》的“部件设计的一般准则”里的“多态性、接口、类型库和 GUID”和“通过接口的实现提供多态性”,以及“用对象编程”的“多态性”中介绍。多接口可以使系统不断进化,无需破坏已有部件或进行大量的重新编译,因为已释放的接口永远不会改变。另一方面,可以通过创建新接口向系统增加新的功能。这种方法非常接近部件对象模块 (COM) 的设计思想,而 ActiveX 规范正是基于部件对象模块的。注意 “版本兼容”的“二进制兼容性”选项与 Implements 和多接口一起使用时是很有用的,可以防止对类的缺省接口的修改。什么时候使用“版本兼容”选项
    如果决定使用“版本兼容”特性,下面这些规则对于决定何时使用不同的选项会有所帮助:使用“不兼容”终止兼容性
    如果是在已有部件的新版本上开始工作,那么进行增强的唯一办法就是打破向后兼容性。此时,在第一次编译工程时设置“不兼容”。这可以保证在开始时标识符清单是空白的,而已有的程序不会错误地试图使用不兼容的版本。在编译不具有兼容性的现有工程之前,还要 修改部件的文件名,使不兼容的版本不会覆盖用户硬盘上以前的版本。
    改变工程属性对话框的通用选项卡上的工程名称,使不兼容的部件具有不同类型的库名。这就可确保部件提供的对象将具有唯一程序 ID 。 
    在“二进制版本兼容性的级别”中详细讨论了这些项目。用“不兼容”进行编译后,切换到“工程兼容”简化开发任务。在进行新的开发时使用“工程兼容”
    开发部件的第一个版本时应使用“工程兼容”。“工程兼容”保留类型库标识符,这样就不需要经常设置测试工程对部件工程的引用了。使用“工程兼容”还可以使测试时在部件工程和已编译部件之间切换更加容易。“工程兼容”在“工程兼容性:避免引用丢失”中讨论。对已有部件的新版本使用二进制兼容性
    如果希望用早期版本编译的应用程序能够在新版本下工作,那么在开发任何部件的第二个版本时应该切换到“二进制兼容”。切换到“二进制兼容”在相关主题“为兼容性提供参考点”中讨论。不要混用二进制兼容性和多接口
    如果使用多接口和 Implements 语句来提供向后兼容性,不要使用“二进制兼容”修改已定义为使用 Implemens 的抽象接口。要增强部件的任何一个接口,Visual Basic 会修改接口的 ID。通过增加接口来改进软件的技术依赖于接口不变性。就是说接口一旦定义就永不修改— 包括接口 ID。