VC 常用数据类型_lie to me的博客-程序员秘密

技术标签: VC程序设计  VC  

类型名 作用
HANDLE 句柄
WINAPI 一个宏 替换的是: __stdcall
LPVOID 没有类型的指针
DWORD Double Word 注册表键值
wchar_t 宽字符 Unicode编码也是存在这里面但是不能代表这是Unicode的存储类型 可以使用TEXT() 将char转为wchar_t
   

常用VC数据类型。

持续更新

数据类型对比

#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY __stdcall
#define CALLBACK __stdcall
#define APIPRIVATE __stdcall

几个关键字的对比
__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。

调用协议常用场合
__stdcall:Windows API默认的函数调用协议。
__cdecl:C/C++默认的函数调用协议。
__fastcall:适用于对性能要求较高的场合。
函数参数入栈方式
__stdcall:函数参数由右向左入栈。
__cdecl:函数参数由右向左入栈。
__fastcall:从左开始不大于4字节的参数放入CPU的ECX和EDX寄存器,其余参数从右向左入栈。
问题一:__fastcall在寄存器中放入不大于4字节的参数,故性能较高,适用于需要高性能的场合。
栈内数据清除方式
__stdcall:函数调用结束后由被调用函数清除栈内数据。
__cdecl:函数调用结束后由函数调用者清除栈内数据。
__fastcall:函数调用结束后由被调用函数清除栈内数据。
问题一:不同编译器设定的栈结构不尽相同,跨开发平台时由函数调用者清除栈内数据不可行。
问题二:某些函数的参数是可变的,如printf函数,这样的函数只能由函数调用者清除栈内数据。
问题三:由调用者清除栈内数据时,每次调用都包含清除栈内数据的代码,故可执行文件较大。
C语言编译器函数名称修饰规则
__stdcall:编译后,函数名被修饰为“[email protected]”。
__cdecl:编译后,函数名被修饰为“_functionname”。
__fastcall:编译后,函数名给修饰为“@[email protected]”。
注:“functionname”为函数名,“number”为参数字节数。
注:函数实现和函数定义时如果使用了不同的函数调用协议,则无法实现函数调用。
C++语言编译器函数名称修饰规则
__stdcall:编译后,函数名被修饰为“[email protected]@YG******@Z”。
__cdecl:编译后,函数名被修饰为“[email protected]@YA******@Z”。
__fastcall:编译后,函数名被修饰为“[email protected]@YI******@Z”。
注:“******”为函数返回值类型和参数类型表。
注:函数实现和函数定义时如果使用了不同的函数调用协议,则无法实现函数调用。
C语言和C++语言间如果不进行特殊处理,也无法实现函数的互相调用。

(转摘)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42193704/article/details/102593203

智能推荐

python怎么读write_Python&OpenCV - 读写(read&write)视频(video) 详解 及 代码_weixin_39758032的博客-程序员秘密

读取(read&write)视频(video) 详解 及 代码本文地址: http://blog.csdn.net/caroline_wendy/article/details/17084397OpenCV读取视频, 获得视频的格式, 读取视频的每一帧, 播放控制; 使用VideoCapture类和read()函数;获取视频属性(码率\尺寸)使用VideoCapture的get()方法;"avi"...

天下IT:程序员能挣哪些外快?_叶广明_微信ye_guangming的博客-程序员秘密

各位朋友,大家好!欢迎收看《天下IT》。  今天我们给您讲讲程序员,坦率的说世界上的程序员基本跟我手里的帽子一样遍地都是,各种各样的程序员,因为程序员已经成为社会的主流打工群体。但是程序员实际在公司里往往是最不受重视的,比如说金融危机来了,先裁的经常是研发人员,因为销售人员还能继续给公司带来收入,天天加班加点编程序的程序员他们还有没有活路了。而且俗话说“人无横财不富,马无夜草不肥”,难道程序员

CodeBlocks调试器缺少(gdb.exe)文件_泊停Bo的博客-程序员秘密

CodeBlocks调试器缺少(gdb.exe)文件 错误如下:Building to ensure sources are up-to-dateSelecting target:DebugERROR: You need to specify a debugger program in the debuggers's settin...

stl智能指针和boost智能指针对比_繁华落尽梦一场的博客-程序员秘密

先说说stl中的智能指针auto_ptr,先说说auto_ptr的特点。std::auto_ptr用来管理单个堆内存对象,但是独享所有权,且不允许赋值和拷贝(没有重载operator=),所以如果在函数内部需要指针时,auto_ptr是一个不错的选择,但需要注意的是它不容许复制,这也就是容器(vector,list等)中的元素类型不能是auto_ptr。一般的用法是std::auto_ptr

Anaconda_用命令创建环境、删除环境、安装程序包_装环境不想装了命令_Mic_hu的博客-程序员秘密

Anaconda_用命令创建环境、删除环境、安装程序包安装anaconda进入anaconda命令行安装anacondaanaconda能够方便的安装集成的开发环境,首先找到官网链接找到自己适合的版本,这里以windows 64位为例。链接进入anaconda命令行找到命令行入口在这里就可以输入conda环境创建等各种命令conda env list或conda info --envs 或者 conda info -e :查看当前anconda存在的虚拟环境2.cond

性能测试基础_尘世风的博客-程序员秘密

什么是软件性能?软件的性能是个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等等。用户视角的软件性能:从用户角度来说,软件性能就是软件对用户操作的响应时间管理员视角的软件性能系统的响应时间;系统运行时服务器的状态,如CPU利用情况,内存使用情况等;系统是否能够实现扩展;系统支持多少用户访问;系统性能可能的瓶颈在...

随便推点

js 弹出子窗口_js弹出子窗口_日出东方VS唯我不败的博客-程序员秘密

Javascript弹出子窗口 可以通过多种方式实现,下面介绍几种方法 (1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象 其用法为: window.open(URL,windowName,parameters); URL: 描述要打开的窗口的URL地址,如何为空则不打开任何网页; windowName:

#Python#错误之ModuleNotFoundError: No module named ‘yaml‘_Happy_Yu_Life的博客-程序员秘密

python 包导入错误:ModuleNotFoundError: No module named 'yaml'错误原因: 缺少Moudle yaml解决方法: pip 安装 即可。特别注意:安装的包名不是 yaml 而是 pyyaml,即pip install pyyaml...

测试人员要求_测试人员需求_饱饱抱抱的博客-程序员秘密

素质要求对测试感兴趣-兴趣是最好的老师,当别人都找不到bug时,他还能找到;当别人都对重复的回归测试感到厌倦的时候,他还是抱着探索的精神继续测试。好奇心-对软件的功能好奇,对软件所能做的事情好奇,对使用这个软件的用户好奇,对软件在界面背后悄悄做的事情好奇,在测试过程中能不断产生新的想法,不断的发现新问题。成就感-开发人员的成就感来源于创造、建设,测试人员的成就感来源于破坏。责任感-责任感是一个合格...

JavaEE和JavaSE哪个更好学?_javase和javaee哪个难_是一只萨摩耶的博客-程序员秘密

Java作为最流行的编程语言受到了许多人的喜爱,其在编程中的地位自不必多说。对于许多才刚刚入门Java的朋友来讲,常常会产生这样的困惑,JavaEE是什么?JavaSE又是什么?两者的区别有哪些?学哪个比较好?这一系列的问题,在本文中我都会为大家详细解答,要是大家感兴趣就接着看下去吧!JavaEE和JavaSE的区别有哪些?JavaEE:Java Enterprise Edition,Java企业版,多用于企业级开发,包括web开发等等。企业版本帮助开发和部署可移植、健壮、可伸缩切安全的服务端Java应

【Python】详解Python多线程Selenium跨浏览器测试_alexlau2016的博客-程序员秘密

前言在web测试中,不可避免的一个测试就是浏览器兼容性测试,在没有自动化测试前,我们总是苦逼的在一台或多台机器上安装N种浏览器,然后手工在不同的浏览器上验证主业务流程和关键功能模块功能,以检测不同浏览器或不同版本浏览器上,我们的web应用是否可以正常工作。下面我们看看怎么利用python selenium进行自动化的跨浏览器测试。什么是跨浏览器测试跨浏览器测试是功能测...

推荐文章

热门文章

相关标签