她说这句话什么意思?!

isage2002 2002-04-12 11:07:15
用vb作了一个aaa.dll,在生成工程组时 出如下错误:
引用了双向没有双向兼容文件设置的工程 'c:\aaa.vbp',不能编译

是什么意思呢:) 如何解决
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoqi5037 2002-04-13
  • 打赏
  • 举报
回复
代码可以看看吗?
wkoji 2002-04-13
  • 打赏
  • 举报
回复
我还以为是那个“她”呢;(
water_j 2002-04-13
  • 打赏
  • 举报
回复
二进制版本兼容性的级别


对于在类模块中描述的接口,Visual Basic 定义了三种版本兼容性级别。

版本相同意味着接口都是一样的,新版本的类型库和旧的完全一样。方法或 Property 过程中的代码可能修改或增强了,但这对于客户应用程序是透明的。


版本兼容意味着类型库中增加了对象和/或方法,但对已有的属性或方法未做修改。新的或旧的客户应用程序都可以使用此部件。


版本不兼容意味着旧的类型库中至少有一个属性或方法被改变或删除。引用该部件的已有客户应用程序无法使用新版本。
版本相同的接口
部件作为应用程序的一部分发布,在几种情况下要求进行修改。如果某个方法对用户来说成了瓶颈,那么就要优化它的性能。如果方法所依据的业务规则发生了变化,为了反映这个变化,要对对象的方法做一些内部实现上的修改。

除非修改参数的名称和数据类型、参数次序、属性和方法的名称、或返回值的数据类型,修改已有的 Property 过程和方法中的代码,不会影响版本相同接口。

对于版本相同的升级情况,创建可执行文件可以使用和已有可执行文件相同的文件名。Visual Basic 对类型库使用相同的版本号。

重点 如果用版本相同或版本兼容的接口发布部件的新版本,同时保持相同的可执行文件名,那么应该使用“工程属性”对话框的“生成”选项卡使文件的版本号递增。对于使用部件的应用程序,这可以确保它的安装程序在安装过程中把旧的版本替换掉。

版本兼容接口
如果增强部件的途径是向已有部件中增加新的类或者向已有类添加新的属性和方法,那么可执行文件可以继续使用相同的文件名。只要不修改已有的属性和方法,Visual Basic 就会更新类型库的版本号并保持和旧的版本号的兼容。

用部件新版本建立的客户应用程序将用新的版本号编译,同时使用所有的新特性。但是这样的客户应用程序不能和部件的早期版本一起使用,因为类型库的版本只是向上兼容的。

和版本相同发布一样,要记住递增可执行文件的文件版本号。

版本不兼容接口
有时,在部件早期版本的设计决定中,对将来的需求考虑得不够清楚。如果要想使部件中的代码在新的开发工程中继续发挥作用,不得不改变接口。

例如,Coffee 方法的 CupsPerAnnum 参数在部件的第一个版本中是用 Integer 实现的。部件使用了一段时间之后,可能客户会有传递更大值的需要,而 Integer 的范围却不够。

对于用以前版本编译的客户应用程序,有很多操作都会导致类型库的版本号和它不兼容,而提交的新版本也无法和它一起使用。改变方法的声明只是其中的一种。下面的变动都会导致版本不兼容:

修改“工程属性”对话框“通用”选项卡的“工程名称”字段。


修改类模块的 Name 属性,该类的 Public 属性是 True(对于控件),或者其 Instancing 属性不是 Private(对于类模块)。


删除公共类模块,或者设置它的 Instancing 属性为 Private。


从公共的类模块或控件中,删除公共的变量、过程、或 Property 过程,或者把它变成 Private 或 Friend。


在公共的类模块或控件中,修改公共的变量、过程、或 Property 过程的名称或数据类型。


在公共的类模块或控件中,修改公共过程或 Property 过程的参数的名称、数据类型或顺序。


在“过程属性”对话框中修改过程 ID (DispID) 或者其它参数。
花时间进行估算
如果已经决定要做一些修改,而这些修改会使部件和以前的版本不兼容,那么建议在开始创建部件的不兼容版本之前,花些时间考虑一下接口的整个设置。

考虑多接口
要记住,除了使用“版本兼容”之外还有其它办法。可以考虑通过使用 Implements 语句增加新接口的方法来增强部件,这在“部件设计的一般准则”的“通过接口的实现提供多态性”中介绍。

多接口是部件对象模式 (COM) 的一个关键特性— ActiveX 规范就是建立在这个基础上的,它为增强软件部件提供了更灵活的途径。它允许不断地改进系统,同时不破坏已有的部件。

不要把已有的类模块接口分解成小的接口以方便使用 Implements。使用多接口的好处之一就是可以先实现小的接口,只要在需要新功能的时候向系统增加新接口就可以了。

使用无兼容性
如果决定使用无兼容性版本,那么就要考虑如何减少部件的用户以后可能遇到的麻烦。如果以后的版本还要做一些可能破坏兼容性的修改,那么最好把这些修改集中在一次进行。

计划对不兼容进行的修改时,把工程作为一个新的任务来对待,应该投入尽可能多的精力进行计划,就象在创建新的部件。

创建不兼容版本,这要求三个步骤:改变工程名,改变文件名以及通过选定不兼容进行编译。

修改工程的名称
发布部件的不兼容版本时,关键的修改是工程名称的修改。工程名称在“工程属性”对话框的“通用”选项卡中设置,在部件提供的每个类中,它是程序 ID 的第一个部分。

例如,SmallMechanicals 部件可能提供一个 Widgets 类。客户应用程序可能会创建一个变量,该变量包含对 Widget 对象的引用,如:

Private wdgDriver As SmallMechanicals.Widget

把工程名和类名连接起来就是程序 ID,它必须是唯一的。如果创建该部件的新版本,可命名为 SmallMechanicals200。这样,Widget 对象的两个版本可以注册在同一个 Windows 注册表,并且不发生冲突。

改变文件名
对于不兼容部件必须修改它的文件名。如果使用旧文件名而不增加文件的版本号,则不兼容部件不能安装在具有旧文件的计算机上。如果增加文件版本,则新文件将覆盖旧文件,而且,使用旧版本的应用程序将失败。

用不兼容编译
第一次编译不兼容部件之前,先打开工程属性对话框(可由工程菜单访问),选定部件选项卡,然后选定版本兼容框中的不兼容性。

不要忽略这一步。用不兼容编译可确保新的可执行文件将不包含任何属于以前的版本的 GUID (例如,类 IDs 或界面 IDs )。这对使用原版本继续工作的应用程序来说是必要的。

提示 在用不兼容编译了一次之后,请切换到属性兼容性,以简化开发工作。

进行版本不兼容修改的其它办法
如果不想象上面介绍的那样改变多个接口,那么可以使用类达到相同目的。

就是说,可以通过添加新的对象、属性和方法,而不是修改已有的,避免进行那些引起版本不兼容的改动。已有的应用程序继续使用旧的方法和对象,而新的应用程序的开发人员可以使用新的对象。

例如,为了发挥增强的 General Ledger 系统的优点,可能需要向 FinanceRules 部件的一些业务规则中增加 SubAccount 参数。

如果每个规则都是作为 GL 对象的一个方法实现的,那么就可以在不破坏部件版本兼容性的前提下添加一个名为 GL97 的新对象。该对象具有和 GL 对象一样的方法,但在适当的地方有 SubAccount 参数。

如果需要向对象中添加已有方法的新版本,可以对新方法命名为原来的名称后加上版本序列号— 如:“Execute2”。

这个办法不如实现多接口灵活和有效。如果复制整个类会十分麻烦,同时类的接口也会变得庞杂和难以处理— 例如,在使用某个 Query 类时可能会发现有 Execute 方法、Execute2 方法、Execute3 方法,等等。但是这毕竟是一条正确的道路。

详细信息 “为二进制版本兼容性提供参考点”介绍了何时以及如何把部件的一个版本指定为版本兼容性的参考点。关于该特性的主题列表请参阅“版本兼容性”。在“部件设计的一般准则”的“通过接口的实现提供多态性”中介绍了使用多接口的软件改进技术。
isage2002 2002-04-13
  • 打赏
  • 举报
回复
你没有遇到过吗
代码吗....不好意思

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧