摘要: 在经典的汇编语言教程中,函数调用时堆栈的使用都是着重讲解的问题。如今随着高级语言的越来越完善,单纯使用汇编开发的程序已经不多了。但对函数调用时堆栈动向的了解仍有助于我们明晰程序的执行流程,从而在程序编写和调试的过程中有一个清晰的思路。
一.调用约定
在win32中,有关函数的调用主要有两种约定。
1._stdcall
以__stdcall方式调用的函数有以下特征:
• ......
摘要: 文/黄昱
使用activex控件可快速实现小型的组件重用、代码共享,从而提高编程效率,降低开发成本。但是activex控件对于最终用户并不能直接使用,因为activex控件必须先在windows中注册。注册activex控件一般来说有六种途径,它们有各自的优点,运用范围也不同。
regsvr32.exe注册
regsvr32.exe位于windows目录的system子目......
Win32开发中最易踏上的地雷 有关微软编程技术的书籍可谓多如牛毛,但读来读去感觉还是msdn比较权威.这里就拿一个例子来说吧,可能让很多刚开始学习win32 api程序设计.甚至是一些已经有一定win32 api经验的人感觉大汗淋漓.
【程序编程相关:
Windows2000的“隐形”武器…】 【推荐阅读:
Win2000安全审核让入侵者无…】
在学习win32 api程序设计时,“第一课”我想都会学到“事件循环”吧?很多书给出了类似这样的经典示例: 【扩展信息:
Windows2000的“隐形”武器…】
int winapi _twinmain(hinstance hinst, hinstance hprevinst, lpctstr lpcmdline, int ncmdshow)
{
msg msg;
...
while(getmessage(&msg, null, 0, 0))
{
translatemessage(&msg);
dispatchmessage(&msg);
}
...
return (int)msg.wparam;
}
没错吧?多么熟悉的事件循环,它可以很好地工作,当收到一个wm_quit事件的时候,getmessage()返回0,我们的程序得以正常退出.因此,几乎任何一本讲述win32 api程序设计的书籍或文章,不论国内的还是国外的,都会以这样一个程序作为第一章中的示例.
然而,就在前不久,与往常一样,闲来无事就翻起msdn来,不知怎么的,就跑来看这个再熟悉不过的getmessage()函数的参考来了.这一看不要紧,头顶顿时冒出虚汗——原来这么多年我们这么写程序,不能说是错误的,但绝对是有漏洞!来看msdn上对于getmessage()函数的讲解(节选):
注意:下面一段文字节选自msdn library online,原文参见:
http://msdn.microsoft.com/
library/
en-us/
winui/
winui/
windowsuserinterface/
windowing/
messagesandmessagequeues/
messagesandmessagequeuesreference/
messagesandmessagequeuesfunctions/
getmessage.asp
>return value
...
下一页 摘要:win 32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用api函数createfile来打开或创建的。该函数的声明为:
handle createfile(
lpctstr lpfilename, // 文件名
dword dwdesiredaccess, // 访问模式
dword dwsharemode, // 共享模式
lp......