WEB开发网
开发学院软件开发VC ATL布幔之下的秘密(5) 阅读

ATL布幔之下的秘密(5)

 2006-07-22 22:54:48 来源:WEB开发网   
核心提示: 这个和方法看起来比第一个要好,但是它仍然有两个问题,ATL布幔之下的秘密(5)(10),第一,如果用户希望使用cbWndExtra,那么让我们略微修改一下程序,再添加一个成员变量,那么他/她就可能会覆盖着一技术所使用的数据,这样客户就需要在使用cbWndExtra的时候十分注意了

这个和方法看起来比第一个要好,但是它仍然有两个问题。第一,如果用户希望使用cbWndExtra,那么他/她就可能会覆盖着一技术所使用的数据,这样客户就需要在使用cbWndExtra的时候十分注意了,以防丢失信息。那么好了,你可以在文档中写明在使用你的库时不要使用cbWndExtra,但是仍然会有一个问题:这个方法并不是很快,又一次违背了ATL的规则——ATL应该尽可能地小和快。

ATL没有使用这两个方法中的任何一个,它使用的方法被称作Thunk。Thunk是一个小系列的代码,并且这一术语被用在不同的地方。你可能曾经听过两种Thunking:

Universal Thunking

Universal Thunking允许在16位代码中调用32位的函数,在Win 9x和Win NT/2000/XP下都可以使用,也被称作Generic Thunking。

General Thunking

General Thunking允许在32位代码中调用16位的函数,它只能用在Win 9x中,因为Win NT/2000/XP是纯32位操作系统,所以在32位代码中调用16位的函数不合乎逻辑。General Thunking也被称作Flat Thunking。

ATL没有使用这两种方法,因为你不会在ATL中将16位和32位的代码混合。事实上,ATL插入了一小段代码来调用正确的窗口过程。

在研究ATL的Thunking之前,让我们先从一些基础概念开始。请看下面的简单程序。

程序72. #include <iostream>
using namespace std;
struct S
{
  char ch;
  int i;
};
int main()
{
  cout << "Size of character = " << sizeof(char) << endl;
  cout << "Size of integer = " << sizeof(int) << endl;
  cout << "Size of structure = " << sizeof(S) << endl;
  return 0;
}
程序的输出为:Size of character = 1
Size of integer = 4
Size of structure = 8
一个整型和一个字符的尺寸之和应该是5而不是8。那么让我们略微修改一下程序,再添加一个成员变量,看看会发生什么。

上一页  5 6 7 8 9 10 

Tags:ATL 之下 秘密

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接