感悟生活

Life is like a box of chocolates. You never know what you're gonna get.
随笔 - 97, 评论 - 982, 引用 - 46

导航

工具

关于

标签

每月存档

广告



访客

 

最近由于项目的原因,需要在Win9x平台上做一些底层的工作。Win95/Win98虽然是32位的操作系统,但是为了兼容16位应用程序,其中仍然保留着相当数量的16位程序,一些系统调用,最终还是通过16位程序完成的。这样,在Win9x平台上,一些底层的应用就会涉及32位代码和16位代码之间的互相调用。

微软为16位与32位代码间的互操作提供了一个标准的解决方案,称作Flat Thunk(在微软的技术中,有很多地方都用到了thunk这个词,比如在ATL中也有一个thunk,用来实现窗口句柄和窗口类之间的映射。Thunk在金山词霸中的解释是“形(式)实(在)转换程序”,侯捷在某处将它译为“一小段程序”)。简单说来,Flat Thunk由一个thunk脚本、一个32位dll和一个16位dll组成,这两个dll中含有thunk compiler生成的32位和16位连接代码,避免了由程序员自己来处理32位和16位代码转换时复杂的堆栈管理、内存对齐等工作。KB中有两篇文章解说的很详细:

 

HOWTO: Call 16-bit Code from 32-bit Code Under Windows 95, Windows 98, and Windows Me

HOWTO: Call 32-bit Code from 16-bit Code Under Windows 95, Windows 98, or Windows Millennium Edition

 

其中要用到一些比较古老的工具,现在的Platform SDK中已经没有了,比如VC1.52、Thunk Compiler等。如果一直有订阅MSDN,到以前的MSDN中找找,可能能够找到。

相关文章

Loading...

打印 | 张贴于 2004-04-07 11:12:00 | Tag:工作

留言反馈

#回复: 16位与32位程序的互操作 编辑
那两个KB,都是win95/98的

我想再win3.1下调用32位的dll可以吗????
2004-06-16 09:35:00 | [匿名用户:hf]
#回复: 16位与32位程序的互操作 编辑
windows2000和98的thunk机制不同,我现在的那个16位dll是没有源码的。不知道该怎么办了。
2004-06-15 10:58:00 | [匿名用户:wouldfly]
#回复: 16位与32位程序的互操作 编辑
是的,Windows2000已经不兼容16位程序了。 具体的做法可以看那两篇KB,很详细。
2004-06-14 19:47:00 | [匿名用户:sam1111]
#回复: 16位与32位程序的互操作 编辑
我如果要给一个16位的dll做成一个32位的dll,以便供程序调用,需要做什么?
2004-06-14 16:08:00 | [匿名用户:wouldfly]
#回复: 16位与32位程序的互操作 编辑
有用,我现在用到了这个方面知识,首先请问是不是98和2000的thunk机制不同,在98下编译的调用16位程序的32位程序是不是到2000下不能运行,提示找不到文件?
2004-06-14 16:02:00 | [匿名用户:wouldfly]
#回复: 16位与32位程序的互操作 编辑
有些东西写下来只是一种记录,不一定对别人有用:)
2004-04-08 08:46:00 | [匿名用户:sam1111]
#回复: 16位与32位程序的互操作 编辑
说这个有什么用?
2004-04-07 19:21:00 | [匿名用户:rivershan]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System