C++代码如下:
.h头文件

#pragma once

#ifdef DLLTestAPI

#else
#define DLLTestAPI _declspec(dllimport)
#endif

int DLLTestAPI __stdcall add(int, int);

int DLLTestAPI __cdecl subtract(int, int);

.cpp代码文件

#define DLLTestAPI _declspec(dllexport)

#include "Test.h"

int __stdcall add(int a, int b)
{
    return a + b;
}

int __cdecl subtract(int a, int b)
{
    return a - b;
}

可以看到 add方法是使用__stdcall修饰的,而subtract方法是使用__cdecl修饰的。

反汇编后得到的汇编代码如下

add方法:

100115D0    55              PUSH EBP
100115D1    8BEC            MOV EBP,ESP
100115D3    81EC C0000000   SUB ESP,0C0
100115D9    53              PUSH EBX
100115DA    56              PUSH ESI
100115DB    57              PUSH EDI
100115DC    8DBD 40FFFFFF   LEA EDI,DWORD PTR SS:[EBP-C0]
100115E2    B9 30000000     MOV ECX,30
100115E7    B8 CCCCCCCC     MOV EAX,CCCCCCCC
100115EC    F3:AB           REP STOS DWORD PTR ES:[EDI]
100115EE    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
100115F1    0345 0C         ADD EAX,DWORD PTR SS:[EBP+C]
100115F4    5F              POP EDI
100115F5    5E              POP ESI
100115F6    5B              POP EBX
100115F7    8BE5            MOV ESP,EBP
100115F9    5D              POP EBP
100115FA    C2 0800         RETN 8

subtract方法:

10011610    55              PUSH EBP
10011611    8BEC            MOV EBP,ESP
10011613    81EC C0000000   SUB ESP,0C0
10011619    53              PUSH EBX
1001161A    56              PUSH ESI
1001161B    57              PUSH EDI
1001161C    8DBD 40FFFFFF   LEA EDI,DWORD PTR SS:[EBP-C0]
10011622    B9 30000000     MOV ECX,30
10011627    B8 CCCCCCCC     MOV EAX,CCCCCCCC
1001162C    F3:AB           REP STOS DWORD PTR ES:[EDI]
1001162E    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
10011631    2B45 0C         SUB EAX,DWORD PTR SS:[EBP+C]
10011634    5F              POP EDI
10011635    5E              POP ESI
10011636    5B              POP EBX
10011637    8BE5            MOV ESP,EBP
10011639    5D              POP EBP
1001163A    C3              RETN

大家已经看到了,他们的唯一区别是:
使用__stdcall修饰的add方法,最后的RETN指令的操作数是8,而使用__cdecl修饰的subtract方法,最后的RETN指令没有操作数。

RETN指令的操作数为什么是8呢,原因也很简单,就是add方法有两个int参数,也就是说压栈的时候压入了两个字节,正好8位,RETN 8的意思应该是让栈顶指针ESP向后移动8位。

http://blog.csdn.net/songjinshi/article/details/8442829

qt cef嵌入web的更多相关文章

  1. qt cef嵌入web(二)

    在qt cef嵌入web文章中已经讲述了怎么把cef页面嵌入到qt程序中,但是这样并不完美,因为如果需要在多个窗口上创建cef浏览器部件的话,在 消息监听部分没有办法做区分多个浏览器事件,在这篇文章中 ...

  2. qt添加cef库嵌入web [转]

    qt cef嵌入web 原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium ...

  3. 两个基于C++/Qt的开源WEB框架

    1.tufao 项目地址: https://github.com/vinipsmaker/tufao 主页: http://vinipsmaker.github.io/tufao/ 介绍: Tufão ...

  4. 嵌入Web资源的方法

    可以将js .图片.css等嵌入Assembly中,这样就不用将文件在aspx中写了,特别适合做自定义控件的时候将控件用到的资源打包. 将文件放到项目的合适路径,比如jpg文件所在路径的namespa ...

  5. QT中嵌入SDL

    原地址:http://www.qtcn.org/bbs/read.php?tid=23926 前段时间在做一个音视频编码板卡的PC跨平台程序,使用QT框架,其中有块功能是往QT里嵌入SDL,来播放YU ...

  6. Qt实现嵌入桌面的半透明窗口 good

    这儿用上了前面一文提到的函数findDesktopIconWnd().见: http://mypyg.blog.51cto.com/820446/263349 一.将Qt窗口嵌入到桌面中.声明一个最简 ...

  7. Xamarin.Android 嵌入web端界面

    在程序中嵌入Web端界面. 首先在前台界面上创建一个webview <android.webkit.WebView android:layout_width="match_parent ...

  8. Unity3d嵌入web网页

    应用场景 程序中的界面风格 UI内容等相关内容需要很容易方便的跟新替换,不使用unity传统的热加载方式,也不想使用和H5等做混合APP的时候, 就用嵌入web来实现. 假如我想替换某个背景图,一般来 ...

  9. WinForm嵌入Web网页的解决方案

    企业级信息化系统绝大部分采用BS架构实现,如门户网站.OA系统.电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无 ...

随机推荐

  1. C# http 发送post或get请求

    /// <summary> /// 向服务器提交XML数据 /// </summary> /// <param name="url">远程访问的 ...

  2. ClassLoader类加载机制

    一.类加载器 类加载器(ClassLoader),顾名思义,即加载类的东西.在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘.网络或其他来源加载到内存中,并对字节码进行解 ...

  3. iOS @try

    try{ //1:抛出异常的代码 //2:代码 }catch(){ //3:代码 //4:抛出异常 }finally{ //5:代码 } //6:代码要明确的一点是:不管try是否抛出异常,final ...

  4. splice JavaScript Array 对象

    定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 语法 arrayObject.splice(index,howmany,item1, ...

  5. Android 第三方

    把优酷.土豆等取出它们真是的视频播放地址:http://vparser.com/ volley 项目地址 https://github.com/smanikandan14/Volley-demo (1 ...

  6. JAVA7遍历文件夹

    在JAVA7中提供了新的遍历文件的方法,比原有File类的递归遍历效率要好大约30%左右. 测试结果: 测试用的File类的递归,是经过对比测试几种方法,找出相对效率较好的来和JAVA7进行测试. 1 ...

  7. 【wikioi】1002 搭桥(dfs+最小生成树)

    http://wikioi.com/problem/1002/ 今天开始又开始刷水了哈T_T.照着hzwer神犇的刷题记录刷!!! 题解: 一开始我也不会,但是我想到了直接爆搜T_T. 好吧,题解. ...

  8. OpenCV 2.4.11 VS2010 Configuration

    Add in the system Path: C:\opencv\build\x86\vc10\bin; Project->Project Property->Configuration ...

  9. 微课程--Android--基础控件的使用

    view viewgroup是一种特殊的view,里面可以包含其他的view 如何生成view: 1 在代码里动态生成 2 写在XML里面 view的常见属性--宽度 wrap_content 随着内 ...

  10. 五、Pillar数据管理中心

    Pillar是数据管理中心. Pillar在saltstack中主要作用是存储和定义一些配置管理中需要的信息(比如:软件版本,用户名,密码等) 修改pillar相关配置文件: [root@super6 ...