在进行Windows应用程序设计中,程序员除了需要知道有关一个函数的常用信息(例如函数的名字,近函数或远函数,返回类型以及应如何调用)之外,同时还要知道更多的内容:一个回调函数、引出函数或是一个引入函数。
  引出函数:这个术语与一个函数如何在一个模块中说明而在另一个模块中被调用有关。引出函数是在一个模块中定义而在这个模块之外被调用的一种函数;或是被Windows或是被另一个模块调用。这些函数必须以一种特定的方式进行说明,并被编译器作非凡的处理。这样,当它们被调用时,它们会被正确地束定到合适的数据段上。DLL为其它模块提供要被调用的函数,因此,每个DLL一般都带有一个DLL库,以便应用程序可以合法地调用DLL中的函数。DLL库由DLL中每个引出函数的入口点组成。整个Windows API就是由构成Windows环境的不同的模块所引出的函数组成,这些API函数的入口点在一个名为IMPORT.LIB的DLL库中说明。
  引入函数:在DLL中引出的函数若要能为一个模块调用,必须在这个模块中将这个函数说明为引入函数。由此可见引出函数和引入函数表达的是从两种角度处理同一个函数的术语:引出模块中的一个函数使得这个函数能被其它模块调用;调用引出函数的模块通过引入这个函数才能调用它。在制作Windows应用程序时,连接器自动包含一个名为IMPORT.LIB的库文件。这个文件答应应用程序调用Windows API中的函数。这个文件被称为引入库。引入库提供了应用程序与一个到多个DLL中可被这个应用程序调用的函数之间的连接。
  回调函数:回调函数是一种非凡的引出函数,是由 Windows环境直接调用的函数。一个应用程序至少要有一个回调函数。当一条消息要交给应用程序处理时,Windows调用这个回调函数。这个函数对应于一个活动窗口,被称为这个窗口的窗口函数。因为许多应用程序至少建立一个窗口,并且Windows需要向这个窗口发送消息,所以,处理消息的函数必须由Windows调用。在请求Windows枚举它所维护的对象时,例如字体或窗口,Windows也要调用应用程序中的回调函数。当向Windows提出这样的请求时,就必须向Windows提供回调函数的地址。
  由于引出函数是在不同的模块中被调用的,也就是说,调用者的代码段与被调用的引出函数的代码段不在同一个段中,因此,在所开发的Windows应用程序中,引出函数都被说明为远函数。为了程序运行的效率原因,引出函数都使用Pascal调用约定,这种调用约定不同于C调用约定的地方在于:
最左边的参数先入栈:Pascal调用约定的参数进入栈的顺序是函数调用中最左边的参数先入栈。C的调用约定与此相反,它采用最右边的参数先入栈。

被调用的函数负责从展中清除参数:Pascal调用约定的函数在返回时负责清除栈中的参数;C调用约定的函数不作这种工作,而由调用者来作;这样,当程序中调用了大量的使用C调用约定的函数时,为清除栈中的参数,在程序中要额外地增加许多代码。
全局标识符不保持原来的大小写(一般被为大写形式),也不在标识符前面加下划线。
  为便于程序开发活动,在Windows.h中定义了两个类型名,用于在程序说明引出函数:

类型说明 WINAPI 等价于FAR PASCAL,说明该函数是一个引出函数,这个类型名只用于在DLL中说明引出函数,或在应用程序中对DLL中的引出函数进行函数说明时。 CALLBACK 等价于FAR PASCAL,说明该函数是一个回调函数,它常被用在应用程序模块中说明一个窗口函数或其它种类的回调函数
资料引用:http://www.knowsky.com/394651.html

转载于:https://www.cnblogs.com/vilyLei/articles/1355624.html

Windows下的函数相关推荐

  1. windows 下实现函数打桩:拦截API方式

    windows 下实现函数打桩:拦截API方式 近期由于工作须要,開始研究函数打桩的方法. 由于不想对project做过多的改动,于是放弃了使用Google gmock的想法. 可是也足足困扰另外我一 ...

  2. windows下延时函数

    VC中提供了很多关于时间操作的函数,编写程序时我们可以跟据定时的不同精度要求选择不同的时间函数来完成定时和计时操作. 方式一:VC中的WM_TIMER消息映射能进行简单的时间控制.首先调用函数SetT ...

  3. Windows下system()函数详解

    Start~~ 在C++/C的Windows环境中,对于控制台窗口的处理,有一个函数必须知道: system(" "); 是的,没错.它可以调动Cmd控制台中的命令,来方便程序员的 ...

  4. windows下system函数的使用

    system函数 是可以调用一些DOS命令,比如 system("cls");//清屏,等于在DOS上使用cls命令 写可执行文件路径,可以运行它···· 下面列出常用的DOS命令 ...

  5. windows下创建目录函数_mkdir

    创建目录函数_mkdir(path),返回0表示成功,-1失败 只能创建一级目录,即path倒数第二级必须是已经存在,否则创建不成功. 如果需要创建多级目录,如下: char szPath[256] ...

  6. windows下socket函数一直返回-1的问题

    今天遇到了一个SOCKET初始化的问题,运行平台在linux中,在windows中调试,就出现了socket一直返回-1的错误.解决办法是增加了两段代码,在windows中要使用socket,需要先注 ...

  7. linux下mkdir头文件_Linux中mkdir函数与Windows中_mkdir函数的区别

    下面先来给大家介绍windows下_mkdir函数 #include int _mkdir( const char *dirname ); 参数: dirname是目录的路径名指针 返回值: 如果新目 ...

  8. Windows下断言的类型及实现

    一.内容综述 本文主要介绍Windows下断言assert的实现,并总结断言的不同应用准则.最后给出一个windows自定义断言的方法. 本文行文参考<Debugging Windows Pro ...

  9. Windows下程序向Linux下移植实践

    一.问题的提出 在程序员中有这样一个说法,若一个程序不能移植到Linux下,那这个程序将看不到未来. 由于Linux操作系统源码公开是的,开发库等辅助工具都是源码公开的,这样就减少了程序的不可预知性, ...

最新文章

  1. 【Android源码】AlertDialog 源码分析
  2. java实现沙箱测试环境支付宝支付(demo)和整合微信支付和支付宝支付到springmvc+spring+mybatis环境全过程(支付宝和微信支付)
  3. mysql主从复制-mysqldump
  4. linux内核线程socket,从Linux源码看Socket(TCP)的accept
  5. C语言字符篇(五)内存函数
  6. 使用CodeSmith要注意的几点
  7. 17 合作伙伴角色‘OA’不允许用于科目组xxxx的供应商
  8. docker compose启动服务超时重启记录
  9. 【计算机毕业设计】基于SpringBoot的物流管理系统
  10. 弘辽科技:直通车测款测图
  11. mac远程桌面windows
  12. asp.net 中,什么是div?
  13. 【Python百日基础系列】Day02-Python语法基础
  14. python安装绘图库matplotlib_python绘图库Matplotlib的安装
  15. 常见排序算法及其对应的时间复杂度、空间复杂度
  16. IPsec IKE第一阶段主模式和野蛮模式
  17. 仿生学导论学习笔记——第二章
  18. 08.第九章.人力资源管理
  19. 1G到5G的技术标准,你都了解有哪些呢?
  20. 情人劫硬核送礼指南:一场人造流星雨的浪漫

热门文章

  1. 利用Group Conv在单个CNN中实现集成学习
  2. Caffe的创始人贾扬清说,算法工程师将不存在?
  3. 如何突破科研瓶颈?如何与导师自在相处?微软研究员们的读博心得
  4. 零基础学习Python文本处理
  5. 重磅!AI大牛邢波出任AI大学校长,李开复姚期智都是校董
  6. 21 张让你代码能力突飞猛进的速查表(神经网络、线性代数、可视化等)
  7. Python中append()和extend方法的使用和区别
  8. 《Python编程从入门到实践》记录之Python函数传递任意数量的实参
  9. 遥感图像数据类型的区别
  10. 文字在图片上c语言,HTML让文字在图片上显示的几种方法