编译activex控件时,工程兼容与二进制兼容的本质区别是什么呀?解决思路

编译activex控件时,工程兼容与二进制兼容的本质区别是什么呀?
编译activex控件时,工程兼容与二进制兼容的本质区别是什么呀?
查了些资料,还是不明白。
可能是专业术语我不懂吧。我只想明白。
1。哪种情况下要用工程兼容编译,哪种情况下要用二进制编译。
2。我的dll已经发布到客户的机器上了,但是我修改后重新编译了,然后将这个dll覆盖客户老版本的dll,是不是覆盖一下就行了,是不是需要重新注册呀,我在测试中发现,有时要重新注册,有时不重新注册就行,我没找到原因。为什么有时必须注册,可有时覆盖一下就行而不用注册



------解决方案--------------------
Tiger_Zhao(VB老鸟) 说的不准确
主要是你对你的Com变动的范围。
如果只是修改了过程与函数内部的处理,可以使用二进制兼容,并且直接替换原来的com即可。
不过如果你增加了公开接口,或者修改了公开接口的参数个数、类型以及返回值类型,就是你想二进制兼容编译的时候VB也会提示你兼容性中断的。

另外说一个窍门:
-----------------------
第一次编译之前尽量将各个公开接口定义周详。
为防止遗漏(遗漏几乎是必然的),增加一下接口:
public function Command(byval CommandString as string) as string
编译,然后选择二进制兼容。

以后如果需要增加新的接口,调用Command,传入不同的参数即可。
然后Com中再增加都是私有的函数和过程。
通过这种方式可以有效防止DLL炼狱的煎熬。
------解决方案--------------------
接口变了,TypeLib 的版本就不一样,GUID 也需要重新分配,只不过会尽量保持两个版本的兼容。
------解决方案--------------------
只要你编译为 dll了 , 就应该设置为 二进制 。 如果从来没有编译过 , 处在调试时期 , 就设置为工程兼容就可以了。