xxxx.h头文件解析

来源:互联网 发布:java上传图片到tomcat 编辑:程序博客网 时间:2024/05/21 08:52

#ifndef __WINMEDIC_H__#define __WINMEDIC_H__#include <windows.h>#ifdef __cplusplusextern "C" {#endif// __cplusplusvoid xxxxx_DisplayInit(DWORD ScrWidth, DWORD ScrHeight, unsigned char* pDrawAddr);void xxxxx_DrawBootPic();void xxxxx_DrawProgressBar(unsigned int Pos);// void Winmedic_AutoProgressBarStart();#ifdef __cplusplus}#endif// __cplusplus#endif

首先分析
extern "C" 

1.扩大作用域

extern修饰函数声明。从本质上来讲,变量和函数没有区别。函数名是指向函数二进制块开头处的指针。如果文件a.c需要引用b.c中的函数,比如在b.c中原型是int fun(int mu),那么就可以在a.c中声明extern int fun(int mu),然后就能使用fun来做任何事情。就像变量的声明一样,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的文件作用域的范围中。对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。使用extern和包含头文件来引用函数有什么区别呢?extern的引用方式比包含头文件要简洁得多!extern的使用方法是直截了当的,想引用哪个函数就用extern声明哪个函数。这大概是KISS原则的一种体现吧!这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。

2.按照C的方式编译和连接

即无重载,编译时不会包含函数名、函数参数数量及类型信息,这样外部文件可以找到同名文件

 未加extern “C”声明时的编译方式

  首先看看C++中对类似C的函数是怎样编译的。
  作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:
  voidfoo( int x, int y );
  该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中,函数void foo( int x, int y )与void foo( int x, float y )编译生成的符号是不相同的,后者为_foo_int_float。
  同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同

#include <windows.h>

WINDOWS.H是主要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是:

  WINDEF.H 基本型态定义。
  WINNT.H 支援Unicode的型态定义。
  WINBASE.H Kernel函数。
  WINUSER.H 使用者界面函数。
  WINGDI.H 图形装置界面函数。
  这些头文件定义了Windows的所有资料型态、函数调用资料结构和常数识别字,它们是Windows文件中的一个重要部分。
void xxxxx_DisplayInit(DWORD ScrWidth, DWORD ScrHeight, unsigned char* pDrawAddr);void xxxxx_DrawBootPic();void xxxxx_DrawProgressBar(unsigned int Pos);
这三个依次为初始化程序,开机图片,开机进度条,还有一个进度条初始化的被屏蔽了


原创粉丝点击