昨天搞了一天郁闷的API问题,虽然只是没头没脑的到处乱撞,不过还是有一点收获,那就是,我对windows的机制一点也不懂,所以今天,还是从头开始吧,找来本windows程序设计,
tiy to find smething
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);
return 0 ;
}
知识一个简单的类似helloword的程序,调用了MessageBox这个函数
与平时的程序有一些区别:
1.程序入口的声明:int WINAPI WinMain
不同于平时的 int main
2.并有一系列的参数:
HINSTANCE hInstance:执行实体句柄,该句柄唯一地标识该程序(关 于句柄:在Windows程序设计中,句柄仅是一个应用程序用来识别某些东西的数字。)
HINSTANCE hPrevInstance:确定自身的其它执行实体是否正在运行。然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己的数据区域。
在Windows的早期版本中,当同时运行同一程序多次时,您便创建了该程序的「多个执行实体(multiple instances)」。同一应用程序的所有执行实体共享程序和只读的内存(通常是例如菜单和对话框模板的资源)。在32位Windows版本中,该概念已被抛弃。传给WinMain的第二个参数总是NULL(定义为0)。
PSTR szCmdLine:用于执行程序的命令列。某些Windows应用程序利用它在程序启动时将文件加载内存。
int iCmdShow:指出程序最初显示的方式,可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中。
PS:
一些概念:
API Application Programming Interface
Kernel 处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。(日前由16位的KRNL386.EXE和32位的KERNEL32.DLL实现)
User 指使用者接口,实作所有窗口运作机制。(由16位的USER.EXE和32位的USER32.DLL实作)
GDI 是一个图形设备接口,允许程序在屏幕和打印机上显示文字和图形。(由16位的GDI.EXE和32位的GDI32.DLL实作)
DLL Dynamic Linking Library,动态链接库
动态链接 执行Windows程序时,它通过一个称作「动态链接」的过程与Windows相接。 一个Windows的.EXE文件中有使用到的不同动态链接库的参考数据,所使用的函数即在那些动态链接库中。当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。
引用链接库 mport library,包含了动态链接库名称和所有Windows函数呼叫的引用信息。连结程序使用该信息在.EXE文件中建立一个表格,在加载程序时,Windows使用它将呼叫转换为Windows函数。
仍然对链接这个词不太理解