请教一个API的基础问题,欢迎大家来讨论。 ( 积分: 10 )

  • 主题发起人 主题发起人 bryantd
  • 开始时间 开始时间
B

bryantd

Unregistered / Unconfirmed
GUEST, unregistred user!
我是新手,对API研究不深,或者说都没怎么接触过。这是我对API的一些最最最基本的了解,或者说是“臆断”,希望大家帮我指正一下。<br> &nbsp; &nbsp;我理解的Windows API(Application Programming Interface)是Windows平台提供给软件开发人员的一个函数接口。首先,所谓接口如果按照C++或者Java的概念,应该称为“虚函数”。其次,这个接口不是让我们这些一般编程人员实现的,而是让开发Delphi、C++ Builder等软件开发工具的开发人员来实现这些“虚函数”的真正函数体(我想这是因为如果想要实现他们需要了解更多计算机底层的编程技术吧,而我们一般程序员是不关心这些的)。我们在程序中使用的API实际上是Delphi已经帮我们实现好了的函数,我们直接调用就行了。<br> &nbsp; &nbsp;通过这个理解,也让我觉得真正的软件开发人员才是计算机编程领域的“科学家”,而我们大部分一般的利用Delphi写程序的程序员应该叫做编程领域的“一级用户”(“二级用户”也就是我们的“用户”,呵呵)。<br> &nbsp; &nbsp;还想和大家请几个问题:有人告诉我说,其实Delphi的各个控件实际上是封装了Windows API的程序,这些比较麻烦的工作已经由Delphi帮我们做好了,我们才可以毫不用费力地把控件直接“拖”出来使用。如果是这样,那么Delphi的开发过程是不是首先实现API,再由这些API做出漂亮的控件?<br> &nbsp; 我们一般什么情况下会在程序中使用API函数?有时候我常常想为什么一定要使用API函数?Delphi既然已经实现了这些API函数,为什么不把他们写成一般的函数(OOP语言)来供我们使用?还是说一般的函数只是一些我们常用的函数,而不常用的函数只能由我们编程人员去调用API函数了?<br><br> &nbsp; &nbsp;以上就是我想到的问题,各位高手也须看了会笑话我有点无知了……嗬嗬。不过我是真心想大家请教的。:)
 
我是新手,对API研究不深,或者说都没怎么接触过。这是我对API的一些最最最基本的了解,或者说是“臆断”,希望大家帮我指正一下。<br> &nbsp; &nbsp;我理解的Windows API(Application Programming Interface)是Windows平台提供给软件开发人员的一个函数接口。首先,所谓接口如果按照C++或者Java的概念,应该称为“虚函数”。其次,这个接口不是让我们这些一般编程人员实现的,而是让开发Delphi、C++ Builder等软件开发工具的开发人员来实现这些“虚函数”的真正函数体(我想这是因为如果想要实现他们需要了解更多计算机底层的编程技术吧,而我们一般程序员是不关心这些的)。我们在程序中使用的API实际上是Delphi已经帮我们实现好了的函数,我们直接调用就行了。<br> &nbsp; &nbsp;通过这个理解,也让我觉得真正的软件开发人员才是计算机编程领域的“科学家”,而我们大部分一般的利用Delphi写程序的程序员应该叫做编程领域的“一级用户”(“二级用户”也就是我们的“用户”,呵呵)。<br> &nbsp; &nbsp;还想和大家请几个问题:有人告诉我说,其实Delphi的各个控件实际上是封装了Windows API的程序,这些比较麻烦的工作已经由Delphi帮我们做好了,我们才可以毫不用费力地把控件直接“拖”出来使用。如果是这样,那么Delphi的开发过程是不是首先实现API,再由这些API做出漂亮的控件?<br> &nbsp; 我们一般什么情况下会在程序中使用API函数?有时候我常常想为什么一定要使用API函数?Delphi既然已经实现了这些API函数,为什么不把他们写成一般的函数(OOP语言)来供我们使用?还是说一般的函数只是一些我们常用的函数,而不常用的函数只能由我们编程人员去调用API函数了?<br><br> &nbsp; &nbsp;以上就是我想到的问题,各位高手也须看了会笑话我有点无知了……嗬嗬。不过我是真心想大家请教的。:)
 
简单的说,API就好像是Windows的Dos命令一样,每个负责完成一些事情,以前这些命令在DOS系统下是要用户来敲的,且也有参数和返回值(就是屏幕显示的结果),而这些都被Windows系统中API取代,因为界面过渡到视窗模式,所以,命令就不需要用户来敲了,应该由程序员自己完成。API不是什么虚函数,它那个接口的意思是定义了一个你调用的规范,这和目前我们说的接口(就是COM的)还是有区别的。毕竟Windows时代还是面向过程方法写程序的年代。后面你的理解比较对,是的,程序员就是一级用户,负责把二级用户需要的某个功能实现来用API和系统交互(同时,你本身也不是光和API打交道,还有你自己需要实现的新的,自定义的函数,这些总体构成了一个解决方案——暨产品)。<br><br>你说的控件封装API是为了简化操作,以前的软件开发,小到一个窗口上的最大化最小化按钮,都需要程序员每次写程序的时候自己实现,毫无疑问,在这种大量重复的劳动中,无疑降低了效率。于是类的封装解决了这个问题,因为你只要写一次,以后直接用就可以了,毫无疑问,这就大大提高了开发效率和速度。如果你想学的更深,当然要了解API是什么以及什么时候要用。<br><br>最后,OOP的东西是构建在API上面的,除非MS把Windows重写成OO模式,否则,我们只能用Delphi的控件来模拟OO调用API。现在MS的.NET就是基于OO的,不再是以前的API方式了。其实Delphi本身也给好多API披上了外壳,比如FileOpen,你自己看看SysUtils单元中它是如何调用CreateFile这个API的就知道,为了简化我们的使用Delphi做了许多工作。
 
两位高人哪
 
zqw0117,谢谢你这么耐心给我回答。<br>也就是说Windows API已经就是Windows系统已经实现好了是吗?我一直以为是Delphi实现的呢……<br>如果是Windows实现好的,那么Delphi是通过什么机制让我们能够直接调用这些API函数呢?
 
本来这种问题这应该自己找本书好好看看,但是现在其他学习压力比较大,比较费心,所以就到这里找条捷径了,呵呵。
 
单从软件的角度看 任何功能都是由BIOS实现的。。。<br>所有的功能都是通过调用BIOS中断来完成的<br>比如说通过调用中断10来显示字符'A'<br>mov ah,0Ah<br>mov al,'A'<br>mov bh,0<br>mov cx,l<br>int 10h<br>(当然还有其他的方法来显示 比如 8,9...)<br>每一次写程序的时候都给参数 调用中断 麻烦不说 程序很长 并且不知道参数是干什么的<br>于是出现了函数把以上东西一行表示 假设是 printout(0,0,'A');<br>这种把BIOS功能封装成函数的功能是操作系统提供的 就是相应操作系统的API<br>Windows操作系统就是Windows API.....Linux就是 Linux 都是BIOS功能的封装<br>类似与Delphi的工具就是封装WindowsAPI来实现自己的功能<br>封装出来的函数等也可以成为Delphi API....<br>用户用Delphi作出一些DLL供自己的程序调用 也可以称为 XXX API....<br>比如WinAMP也提供了一些接口扩展功能 可以称为WinAMP API...<br><br>至于那些OO什么的和这个没关系 <br>从底层看,对象实际上就是带有程序段指针的结构体。。。<br>整个OO也都是建立在这个 新版本结构体 之上<br><br><br>BTW:以上相关函数 程序均为表达意思 实际上并非那么声明 理解之用<br>理论上可以直接调用最底层API来实现十分强大的功能 但实际上大部分操作系统都禁止用户直接调用BIOS功能 通过Vxd驱动技术那就是别的话题了...<br>一般就认为操作系统的API就是最底层的API....
 
后退
顶部