[quote=引用 12 楼 Chen8013 的回复:] 自从前几年我的“标准DLL编译工具”出来之后,我再也没有使用VB6来编译AcitveX DLL了。 不过还在“酝酿中”的一个VB6插件,以后开发时也只能写成AcitveX DLL的。 (Add-In插件只能是ActiveX DLL,这个没得选……)
自从前几年我的“标准DLL编译工具”出来之后,我再也没有使用VB6来编译AcitveX DLL了。 不过还在“酝酿中”的一个VB6插件,以后开发时也只能写成AcitveX DLL的。 (Add-In插件只能是ActiveX DLL,这个没得选……)
. . . . . . . . . . . 完全抛弃是不可能的,我使用一些标准的dll,比如ado的dll,opc的dll,但是自己不创建activex dll.把自己创建的所有dll都放在项目中。应该就OK了哈哈。
[quote=引用 6 楼 Y2012 的回复:] [quote=引用 5 楼 chewinggum 的回复:] 全部业务逻辑都内嵌在exe里面绝对没问题,但是程序升级的时候就必须整体升级咯,com的设计初衷是一个dll可以共享给其他应用,正常情况下,只要接口兼容,新的dll可以放到任意位置并注册,调用它的exe不用重新编译也不用改变任何设置就能够继续使用。非com的dll就要放到指定的位置或者系统设置path。各有利弊吧,最后微软自己都有点受不了了。
如果能“不采用ActiveX DLL”,那应该是最好的了。 这样,各个工程的DLL直接放在各自的“工程目录”中,就算是DLL名字相同,也不会相互影响。 如果是ActiveX DLL的话,因为需要“注册”,同名的DLL不兼容,必然引起问题。 如果只能用AcitveX DLL来实现,那么 脆皮大雪糕 在1楼中说的就是很重要的东西了。 另外楼主可以参考一下这篇BLOG:DLL Hell(DLL地狱)问题
[quote=引用 5 楼 chewinggum 的回复:] 全部业务逻辑都内嵌在exe里面绝对没问题,但是程序升级的时候就必须整体升级咯,com的设计初衷是一个dll可以共享给其他应用,正常情况下,只要接口兼容,新的dll可以放到任意位置并注册,调用它的exe不用重新编译也不用改变任何设置就能够继续使用。非com的dll就要放到指定的位置或者系统设置path。各有利弊吧,最后微软自己都有点受不了了。
全部业务逻辑都内嵌在exe里面绝对没问题,但是程序升级的时候就必须整体升级咯,com的设计初衷是一个dll可以共享给其他应用,正常情况下,只要接口兼容,新的dll可以放到任意位置并注册,调用它的exe不用重新编译也不用改变任何设置就能够继续使用。非com的dll就要放到指定的位置或者系统设置path。各有利弊吧,最后微软自己都有点受不了了。
我负责的项目曾经因为兼容出现过大问题,下面是血泪总结。 首先,工程要设置对编译结果的二进制兼容,或者对项目进行兼容。 其次,代码上要进行兼容,简单的说就是 1、所有原来是public的东西,都不能删掉,即使作废了,函数声明也留着 2、所有原来public的函数,参数只能往后面加可选参数,原来已经暴露了的参数名字、数据类型、顺序都别改。 最后,dll不断的用新版本迭代演进,一旦发生新增public函数或者某个public函数新增,那么新版本覆盖旧版本并完成注册以后,就严禁再拿旧版本来注册了。 当时出了事,解决完了我还专门写了个程序来比较编译好的dll暴露出来的接口是否和旧版本的兼容,并且项目组成员统一编码规范。说多了都是泪
7,763
社区成员
197,605
社区内容
加载中
试试用AI创作助手写篇文章吧