在函数前面加上WINAPI、CALLBACK

在函数前面加上WINAPI、CALLBACK

ID:41504588

大小:69.19 KB

页数:10页

时间:2019-08-26

在函数前面加上WINAPI、CALLBACK_第1页
在函数前面加上WINAPI、CALLBACK_第2页
在函数前面加上WINAPI、CALLBACK_第3页
在函数前面加上WINAPI、CALLBACK_第4页
在函数前面加上WINAPI、CALLBACK_第5页
资源描述:

《在函数前面加上WINAPI、CALLBACK》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一直搞不懂为什么在函数前面加上WTNAPT、CALLBACK等是什么意思又不是返回值为什么加在前血今天终于知道了这是一个呼叫声明(姑且称之吧)。引子:看看这个函数:intPASCALWinMain(HINSTANCEhlnst,HINSTANCEhPrev,LPSTRszCmdLine,intsw){MSGmsg;//进行程序的初始化工作if(!AppInit(hlnst,hPrev,sw))returnFALSE;〃消息循环处理for(;;){wh订e(PeekMessage(&msg,NULL,0,0,PMREMOVE))//Peek只是査

2、看事件,一般不作任何处理//Get会做一些例行处理,并且把事件从队列中删除掉(WM_PATNT除外)//通常先peek,看某事件是否存在,再get,进行处理//未经严格测试:如果你get某个在队列中不存在的事件,程序会陷入等待,但是peek总是立即返回{if(msg.message==WM_QUIT)break;//LeavethePeekMessagewhile()loop//TranslateAccelerator将WMKEYDOWN和WMSYSYKEYDOWN消息翻译成为WMCOMMAND消息,〃然后直接将消息送到相关的窗口过程中去,直到

3、消息被处理后才返凹值if(Trans1ateAccelerator(ghwndApp,ghAccel,&msg))continue;TranslateMessage(&msg);DispatchMessage(&msg);if(msg.message==WMQUIT)break;//Leavethefor()1oopWaitMessageO;//当木窗口的消息序列中没有消息的时候,将控制权交给其他的线程直到再次有消息进入自己的消息队列中时才返回}//ReachedonWM_QUITmessageCoUninitializeO;return((i

4、nt)msg・wParam);}别的先别看,现看看这个PASCAL:The__pascal,_fortran,and__syscallcallingconventionsarenolongersupported.Youcanemulatetheirfunctiona]itybyusingoneofthesupportedcallingconventionsandappropriatelinkeroptions.WINDOWS.HnowsupportstheWINAPImacro,whichtranslatestotheappropriateca

5、llingconventionforthetarget.UseWINAPIwhereyoupreviouslyusedPASCALor_far_pasca1.看来现在用WINAPI来代替己经不用的PASCAL了,那么WINAPI是什么呢?WINAPI:查看WINAPI的定义:(WINDOWS.H)^defineWINAPIFARPASCALWINAPI:UseinplaceofFARPASCALinAPIdeclarations・IfyouarewritingaDLLwithexportedAPIentrypoints,youcanusethi

6、sforyourownAPIs・原来是个宏定义。用法也说到了,你可以使用W1NAP1来为H己的API写一个DLL文件(有导出的API入口点的DLL,废话,没有API入口,要DLL干什么?)。消息处理断数就是这么定义的:LONGWINAPIAppWndProc(IIWNDhwnd,UINTmsg,WPARAMwParam,LPARAM1Param){}在VC++6.0中,WINDEF.httdefineWINAPICDECL//二_cdecl#defineCALLBACKPASCAL//=_pascal,VC已经不支持直接使用_pascal了顺便

7、提FCALLBACK:CALLBACK:UseinplaceofFARPASCALinapplicationcallbackroutinessuchaswindowproceduresanddialogprocedures.在BCB(BolandC++Builder)中:winde匚h#defineWINAPIstdcallSdefineCALLBACKstdcall具体来说,他们是关于堆栈的一些说明,首先是函数参数压栈顺序,其次是压入堆栈的内容由谁来清除,调用者还是函数自己?简单说明:_cdecl是C/C++和MFC程序默认使用的调用约定,也

8、可以在函数声明时加上_cdec1关键字來手工指定。采用_cdec1约定时,函数参数按照从右到左的顺序入栈,并且由调用函数者把参数睡出栈以清理堆栈。因此

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。