编译activex控件时,工程兼容与二进制兼容的本质区别是什么呀?
查了些资料,还是不明白。
可能是专业术语我不懂吧。我只想明白。
1。哪种情况下要用工程兼容编译,哪种情况下要用二进制编译。
2。我的dll已经发布到客户的机器上了,但是我修改后重新编译了,然后将这个dll覆盖客户老版本的dll,是不是覆盖一下就行了,是不是需要重新注册呀,我在测试中发现,有时要重新注册,有时不重新注册就行,我没找到原因。为什么有时必须注册,可有时覆盖一下就行而不用注册
查了些资料,还是不明白。
可能是专业术语我不懂吧。我只想明白。
1。哪种情况下要用工程兼容编译,哪种情况下要用二进制编译。
2。我的dll已经发布到客户的机器上了,但是我修改后重新编译了,然后将这个dll覆盖客户老版本的dll,是不是覆盖一下就行了,是不是需要重新注册呀,我在测试中发现,有时要重新注册,有时不重新注册就行,我没找到原因。为什么有时必须注册,可有时覆盖一下就行而不用注册
应算重新注册dll,不重新编译exe也是不行的。
主要是你对你的Com变动的范围。
如果只是修改了过程与函数内部的处理,可以使用二进制兼容,并且直接替换原来的com即可。
不过如果你增加了公开接口,或者修改了公开接口的参数个数、类型以及返回值类型,就是你想二进制兼容编译的时候VB也会提示你兼容性中断的。另外说一个窍门:
-----------------------
第一次编译之前尽量将各个公开接口定义周详。
为防止遗漏(遗漏几乎是必然的),增加一下接口:
public function Command(byval CommandString as string) as string
编译,然后选择二进制兼容。以后如果需要增加新的接口,调用Command,传入不同的参数即可。
然后Com中再增加都是私有的函数和过程。
通过这种方式可以有效防止DLL炼狱的煎熬。
采用 CommandString 的方式是不可取的,接口不直接明了,需要依赖文档描述,而且本来可以用编译器发现的类型或参数不匹配的错误必须在函数中进行判断,工作量的增加远远超过打破二进制兼容进行重新编译。