Win-32 C ++应用程序中的某些函数调用将CALLBACK关键字应用于它们,如本例(取自此MSDN页面 ):
BOol CALLBACK DeleteItemProc(HWND hwndDlg,UINT message,WParaM wParam,LParaM lParam) { // ... code here ... }
我通过Visual Studio看到CALLBACK关键字被定义(使用#define )作为__stdcall 。 __stdcall文档并没有让我更清楚(对我来说)它做了什么。
总之, 使用CALLBACK对我有什么作用? 这是绝对必要的,还是我可以离开这个声明?
EndDialog与DestroyWindow
WorkbookOpen事件与windows服务没有触发,而它与windows应用程序触发
确定types的定义
哪个线程调用windows proccallback函数?
shell扩展:Dragqueryfile返回至多16(在windows 7中)
如何在linux中使用C语言的伪terminal?
主/工作线程和信号处理
在Visual Studio 2005中编译Win32“hello world”的命令行
设置控制台以最大化在Dev C ++
单声道/ C#:一个很好的GUI工具包? 在KDE上看起来不错?
需要的是,__stdcall不是大多数编译器的默认调用约定。 __cdecl是正常的默认值。 调用惯例错误将使您的程序在一个难以诊断的方式行事不端。 参数值错误,堆栈不平衡。
这只是32位代码中的一个问题,64位代码只有一个调用约定。 谁又增加了一个,将被立即禁止到南大西洋的一个小岛上终生。 __stdcall是一个历史性的意外事件,从DOS和16位windows的pascal调用约定开始,当只有很少的内存可用时,在关闭调用的指令时很重要。
CALLBACK被定义为__stdcall机制。 但是,这本身就是一个功能,在发生一个事件(比如说)的时候,这个功能会被其他功能调用。
这是必须的吗? 是! 为什么? 因为默认是__cdecl
CALLBACK不是关键字。 这只是一个预处理器宏,它被替换为适当的调用约定,正如您已经注意到的那样是__stdcall 。
这是一个类似“Pascal”的调用约定, 不支持可变数量的参数 ,Win32 API从早期开始使用,并且由于历史原因而仍然存在。
总结以上是内存溢出为你收集整理的在Win-32 C ++应用程序中,CALLBACK关键字是什么意思?全部内容,希望文章能够帮你解决在Win-32 C ++应用程序中,CALLBACK关键字是什么意思?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)