[转]__cdecl与__stdcall
来自Programming Windows 5th Edition
The WinMain function is given a type of WINAPI (as is every Windows function call defined in the header files), and the WndProc function is
given a type of CALLBACK. Both these identifiers are defined as __stdcall , which refers to a special calling sequence for function calls that occur between Windows itself and your application.
-------------------------------------
原文链接:http://www.cnblogs.com/sober/archive/2009/09/01/1558178.html
我觉得评论里面有几句比较有价值:
不用它们也是没问题的,除非你用C++做的DLL要导出,并提供给Pascal,c调用
另外、
这属于调用约定,主要是不同调用约定产生的目标机器码略有差异。
调用方和被调用方(函数提供方)需要使用相同的调用约定;调用约定主要包含这么几个内容:
(1)又哪一方负责复原栈;
(2)参数传递方式;例如__fastcall使用内部寄存器ECX,EDX传递前两个DWORD 或者size更小的参数;所以速度更快;
[转]__cdecl与__stdcall的更多相关文章
- 调用约定__cdecl和__stdcall
		
首先,__cdecl,c declaration,C风格声明.或者 c default calling(笔者瞎编的).(那么问题来了,为什么PASCAL风格被称为std?) 调用约定的内容包括三点:参 ...
 - 深入体会__cdecl与__stdcall
		
在学习C++的过程中时常碰到WINAPI或者CALLBACK这样的调用约定,每每觉得十分迷惑.究竟这些东西有什么用?不用他们又会不会有问题?经过在网上的一番搜寻以及自己动手后,整理成以下的学习笔记.1 ...
 - C调用约定__cdecl、__stdcall、__fastcall、__pascal分析
		
参考原文地址:https://www.cnblogs.com/yenyuloong/p/9626658.html C/C++ 中不同的函数调用规则会生成不同的机器代码,产生不同的微观效果,接下来让我们 ...
 - __cdecl、__stdcall、__fastcall 与 __pascal 浅析
		
call 指令与 retn 指令 首先我们得了解 CALL 和 RETN 指令的作用,才能更好地理解调用规则,这也是先决条件. 实际上,CALL 指令就是先将下一条指令的 EIP 压栈,然后 JMP ...
 - __cdecl和__stdcall
		
MSVC在编译C/C++程序的时候,默认采用__cdecl调用约定来编译.__stdcall是Win32 API函数的默认调用规约. Calling Convention Internal* MSVC ...
 - __cdecl、__stdcall、__fastcall、thiscall 进栈、出栈区别
		
https://en.wikipedia.org/wiki/X86_calling_conventions https://msdn.microsoft.com/en-us/library/984x0 ...
 - __declspec,__cdecl,__stdcall区别和作用
		
_cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的 顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要 ...
 - __declspec,__cdecl,__stdcall都是什么意思?有什么作用?
		
__cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要 ...
 - 调用约定__stdcall / __cdecl
		
__cdecl与__stdcall这两种调用约定之间的主要差别在于由谁来执行对参数的清理工作. 如果是__cdecl,那么主调函数将负责执行清理工作,如果是__stdcall那被调函数将负责执行清理. ...
 
随机推荐
- poj 1035 Spell checker ( 字符串处理 )
			
Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16675 Accepted: 6087 De ...
 - LruCache DiskLruCache 缓存 简介 案例 MD
			
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
 - jQuery中读取json文件
			
json文件是一种轻量级的数据交互格式.一般在jquery中使用getJSON()方法读取. $.getJSON(url,[data],[callback]) url:加载的页面地址 data: 可选 ...
 - java设计模式2--抽象工厂模式(Abstract Factory)
			
本文地址:http://www.cnblogs.com/archimedes/p/java-abstract-factory-pattern.html,转载请注明源地址. 抽象工厂模式(别名:配套) ...
 - 性能调优的Windows窗体DataGridView控件
			
性能调优的Windows窗体DataGridView控件 . 净框架4.5 在处理大量数据时, DataGridView 控制可以消耗大量的内存开销,除非你仔细地使用它. 在客户有限的内存,你 ...
 - QtGui.QFileDialog
			
The QtGui.QFileDialog is a dialog that allows users to select files or directories. The files can be ...
 - JavaScript操作符
			
一元操作符 只能操作一个值的操作符叫做一元操作符. 递增和递减操作符 递增和递减操作符遵循下列规则: 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减 1 的操作 ...
 - android6.0权限管理工具EasyPermissionUtil
			
前言 android6.0開始,权限的申请发生了改变,申请变的动态化,也就是执行时权限,和iOS相仿,动态化的意思是指,在每次使用须要危急权限的方法的时候.须要检查程序是否获得了该权限的许可.动态化的 ...
 - 模式的秘密-代理模式(2)-JDK动态代理
			
代理模式-动态代理 (1) (2) 代码实践动态代理: 第一步:被代理类的接口: package com.JdkProxy; public interface Moveable { void move ...
 - AI:人工智能搜索策略
			
人工智能搜索策略: