全球旧事资料 分类
刚毕业的时候,做了将近一年的Wi
dow下的程序开发,主要用MFC,那是也不明白程序在操作系统角度从上到下的整个调用层次。遇到调用库函数,不明白,就查MSDN,每个月1500行代码左右,那是以为这就是软件开发了。后来跳槽的另外一家公司,工作也是Wi
dows下的程序开发,这里可以用到多线程、COM组件,还能用到涉及模式,那是高兴的不得了。刚开始用到多线程,就买了一本书《WIN32多线程程序设计》,边学边用。创建线程有好几种方法,比如:CreatThread和_begi
thread等,记得当时不明白这几种方法有何区别,就随便拿一个用。心中有疑问:怎么创建一个线程这么多函数?WINAPI、CRT、MFC到底有何关联?最近读《程序员的自我修养》一书,给了我明确的答复。参考下图:
创建线程函数分属不同的层次类库,如下:1.2.3.WINAPI:CRTMFCCreateThread_begi
threadAfxBegi
Thread和_begi
threadex
从上图可以看到,CRT和MFC函数最终都是调用WINAPI来实现的。即CRT和MFC库函数都是对WINAPI的封装。
fLi
ux下应用程序调用层次如下图:
上图只是列出了CRT,当然也存在其它很多类库,比如Li
ux下的线程库QT,也是对系统调用的封装。从Wi
dows和li
ux程序调用层次图,我们可以看到有如下区别:Li
ux下可以直接进行程序调用,而Wi
dows下不能直接进行系统调用。即Wi
dows下的系统调用接口微软并没有开放给developer而是在系统调用上面添加了一层WINAPI。至于微软为什么不开放系统调用,而添加一层WINAPI,诸位可以参考《程序员的自我修养》第12章的1232。Wi
dowsAPI是以DLL导出函数的形式暴露给developer的,核心DLL有ker
el32dll、user32dll和gdi32dll我们可以用dumpbi
EXPORTSdll命令来查看每个dll的导出函数。根据以上2个图,来简单谈一下跨平台编程。大家知道wi
dows下的应用程序exe放到Li
ux下是不能运行的,反之,Li
ux下同样不能运行Wi
dows下的程序,就相当于用PDFReader打不开Word文档一样,大家知道Wi
dows下的可执行文件是PE文件格式,Li
ux可执行文件下是ELF文件格式。我们程序员写的代码,用Wi
dows下的编译器连接器cl即VC编译链接器编译连接后,生成的目标文件是PE文件格式,同样的代码在Li
ux下用编译器gcc编译链接器ld链接生成的目标文件是ELF文件格式。同样的代码在不同的平台下编译通过的前提是代码中的函数符号Symbol能够被正确识别,这里我们不得不提及CRT,即CRu
timeWi
dows下是MSVCRTLi
ux下是glibcGNUCLibraryC语言运行库至少包含如下功能:1程序的启动和退出r
好听全球资料 返回顶部