构建计算机、Windows 7和传统ADO

2011 年 10 月 28 日

假设你在维护上个世纪九十年代的应用程序,它使用了传统的 ADO 库。重新编译的代码会在所有安装了 Windows 7 SP1 的计算机上正常运行,但是却会在安装有 Windows XP 的计算机上神奇地崩溃,而该程序已经在上面运行了快十年。这是很多做维护工作的开发者所面临的问题。

当这个问题最初发生的时候,微软认为它只会对很少开发者产生影响。的确,不会有很多这样的开发者,他们使用最新版本 Windows,却要编译的应用程序却使用的是 15 年前就出现的旧数据访问技术。 Evan Basalik 继续说到:

我们意识到 ADO 的一些 API 使用了与平台相关的数据类型。我这么说指的是,32 位版本的 API 使用 LONG,而同样 API 的 64 位版本使用的是 LONGLONG。这就导致,当 64 位的应用程序试图使用这些与平台相关的数据类型时,调用程序的数据类型又无法与被调用方法匹配,从而就会产生问题。 http://support.microsoft.com/kb/983246 讨论了一种情况,其中 VBA 宏会产生上述的问题。不幸的是,我们大大低估了在 Windows 7 SP1 中重新编译 ADO 应用程序的客户数量。更坏的是,我说的是“大大低估”,实际上的意思是“极度低估”了。

当我们意识到这个问题的严重性时,就开始努力解决,希望能够得出更好的解决方案。然而此时,我们的首次尝试显然与理想状况相去甚远,这使得问题进一步恶化,因为可能会把改变后的 GUID 应用到底层的操作系统中。这时,我们不得不做出痛苦的决定,开始推动 http://support.microsoft.com/kb/983246 中的做法。是的,我已经意识到会有一些情况,像 VBA 无法得出有效的解决方案,但是我们认为,和继续应用变更后的 GUID 相比,那还是比较好的选择。尽管那并不理想,但我们的建议是,或者使用从 http://support.microsoft.com/kb/2517589 可以获得的向下兼容程序库,或者在 Windows 7 RTM 中对其进行编译。尽管这无法覆盖所有情况,但可以覆盖了大部分情况,并且是在不进行大规模重新设计架构的情况下我们所能够提供的最佳方案了。

现在,我很高兴地宣布,我们已经得出了更好的解决方案。我们会做以下工作:

  1. 通过新的类型库文件 msado60.tlb 为 Windows 7 RTM 发布 6.0 类型库。这是针对多个平台发布的。
  2. 发布新的 6.1 类型库(其中既包含新的接口,也包含了不建议使用的接口),并把它嵌入到 msado15.dll 中。
  3. 把所有 2.x 版本的类型库回退到 Windows 7 RTM 中的版本。

新的长期解决方案实际上已经准备就绪了,但是我们会在明年才会发布,因为需要对其进行更广泛的测试。一旦发布,开发者就可以使用 6.1 类型库来编写 64 位的 VBA 应用程序,也可以使用它来编写不需要运行在旧操作系统中的程序。而其他人都会继续使用 2.x 和 6.0 的类型库。

查看英文原文: Build Machines, Windows 7, and Classic ADO

2011 年 10 月 28 日 18:361657
用户头像

发布了 340 篇内容, 共 111.2 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

拆解增长黑客之实战(二):留存与变现

丁一

读书 增长 产品运营

报销发票抵扣工资的CTO,该不该? | 法庭上的CTO(5)

赵新龙

CTO 法庭上的CTO

第十一周作业

solike

《前端算法系列》数组去重

徐小夕

Java 面试 算法 前端

智慧警务系统开发解决方案,大数据可视化平台建设

WX13823153201

智慧警务系统开发

架构师训练营第一期 - 第十一周课后作业

卖猪肉的大叔

极客大学架构师训练营

(G20200388020528)第一周练习

走走,停停……

Bitmap为什么那么快?

Man

redis 中间件

Redis 持久化方式-RDB

码农架构

redis redis持久化

警察营救安徽望江县17岁女生跳河自尽过程中,现场看热闹的旁观者们在做什么?

wbliu85

通过docker获取系统运行情况的实用命令

晓川

第六周-作业1

Mr_No爱学习

第六周-学习总结

Mr_No爱学习

算法训练营总结

陈皓07

架构词典:语言

lidaobing

架构 语言

Spock单元测试框架实战指南四 - 异常测试

Java老k

Java 单元测试 spock

读写分离这个坑,你应该踩过吧?

楼下小黑哥

MySQL 主从同步 读写分离

排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

当我们谈前端性能的时候,我们谈的是什么

vivo互联网技术

性能优化 前端 前端性能优化 页面

S型曲线不止关乎身材?|技术人应知的创新思维模型(2)

Alan

创新 思维模型

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 架构 面试 多线程

数据结构与算法系列之散列表(一)(GO)

书旅

go 数据结构 算法

「生产事故」MongoDB复合索引引发的灾难

Kerwin

数据库 mongodb

2020 阿里云原生实战峰会即将开幕 云原生落地的正确姿势

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 实战

为什么建议使用你 LocalDateTime ,而不是 Date?

Bruce Duan

LocalDateTime Date

Redis 子进程开销监控和优化方式

码农架构

Redis开发与运维

生产环境压测建设历程之三 淘宝网2009年的痛

数列科技杨德华

话题讨论 | 作为地地道道的程序员半年内都没摸过代码是什么样的体验?

xcbeyond

话题讨论

5种分布式事务方案与阿里的 Seata 中间件

Bruce Duan

分布式事务 seata

悟空活动中台-打造 Nodejs 版本的MyBatis

vivo互联网技术

Java 前端 mybatis nodejs

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

Bruce Duan

反爬虫组件 kk-anti-reptile

构建计算机、Windows 7和传统ADO-InfoQ