Tips: VC++在新建一个.asm文件后必须重新导入project中才能进行编译。

下面是一个汇编与C++相互调用的例子:

Main.cpp

#include <stdio.h>
#include <Windows.h>
#include <string.h> class CTest
{
public:
void Init()
{
m_nSize = 100;
m_pContent = new char[m_nSize];
strcpy(m_pContent,"hello world!");
}
void Show()
{
printf("%s\n",m_pContent);
}
void Destory()
{
if (m_pContent)
{
delete[] m_pContent;
m_pContent = NULL;
}
m_nSize = 0;
}
private:
int m_nSize;
char* m_pContent;
}; extern "C" void __stdcall InitTest(DWORD pThis,DWORD pFunc);
extern "C" int __stdcall bswap_func(int InputVar); int main(int agrc,char* argv[])
{
CTest* pTest = new CTest();
#ifdef TEST_ASM_INFILE
_asm
{
mov eax,pTest
call CTest::Init
}
#else
void (__thiscall CTest::* pFunc)(void) = &CTest::Init;
InitTest((DWORD)pTest,*(DWORD*)&pFunc);
#endif
pTest->Show();
pTest->Destory();
delete pTest; int nTest = 0x12345678;
int nResult = bswap_func(nTest);
printf("Original number:0x%x reverse number:0x%x\n",nTest,nResult);
return 0;
}

Func.asm

.686
.model flat, stdcall .code
InitTest proc pThis:DWORD,pFunc:DWORD
mov ecx,pThis
call pFunc
ret
InitTest endp bswap_func proc InVar:DWORD
mov eax, InVar
bswap eax
ret
bswap_func endp end

VC++ 汇编相关的东西的更多相关文章

  1. VC++ ADO相关

    <VC对ADO的操作> ADO概述: ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口. ADO 使您能够编写应用程序以通过 ...

  2. VC++文件相关操作的函数封装实现

    在开发编译工具中,需要用到文件的相关操作,于是就封装了相关的函数实现: //判断文件是否存在 BOOL FileIsExist(CString strFileName) { CFileFind fin ...

  3. Cesium中常用的一些地理数据文件 以及数据相关的东西

    KML Cesium.KmlDataSource.load CZML Cesium.CzmlDataSource.load GeoJson Cesium.GeoJsonDataSource.load ...

  4. VC维相关知识

    假设空间H(Hypothesis Set) 输入空间D(X1...Xn) 1.增长函数(grown function) 是关于输入空间尺寸n的函数 假设空间对于D中所有实例实现分类(赋予标记)的分类方 ...

  5. android一些系统相关的东西

    添加快捷方式和删除快捷方式: private void addShortcut() { Intent shortcut = new Intent( "com.android.launcher ...

  6. C# 反射相关的东西

     public class PlugingManager    {        //插件装载器        public ArrayList Plugins = new ArrayList();  ...

  7. 编译用到boost相关的东西,问题的解决;以及和googletest库

    编译https://github.com/RAttab/reflect, 发现需要gcc4.7以上的版本才行.于是编译安装最新的gcc-6.2.0, 过程算顺利. http://www.linuxfr ...

  8. spring MVC学习(二)---配置相关的东西

    1.在上一节中我们提到过每一个DispatcherServlet都会有一个上下文 (WebApplictionContext),并且继承了这些上下文中的bean,其中以一些"特殊" ...

  9. 珠峰-cookie相关的东西

    ####  md5 #### #####

随机推荐

  1. Solr6.6.0 用 SimplePostTool索引文件的启示

    本文主要是介绍通过SimplePostTool工具索引文件的结果进行确认,针对不同的文件,索引的结果不同. 1.创建core 首先启动solr,建立名称为data的core,SimplePostToo ...

  2. Solr删除数据

    步骤: 1.在Solr客户端左下方 Core Selector 中点选想要删除数据的索引库 2.点选Documents 3.右侧Document Type中点选XML 4.Document(s)中输入 ...

  3. 【Swift】学习笔记(三)——字符和字符串

    基本了解了变量的创建和基础数据类型,但是在开发中用得最多的还是字符串.那什么是字符串呢? Swift 的String类型表示特定序列的Character(字符) 类型值的集合,它是值类型具有可变性 S ...

  4. Android开发之JNI(一)--HelloWorld及遇到的错误解析

    Android开发之JNI(一)--HelloWorld及遇到的错误解析 1.NDK环境搭建    參考http://blog.csdn.net/xiaoliouc/article/details/8 ...

  5. Django的信号机制详解

    Django提供一种信号机制.其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) .当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行. Django内置了一些信号 ...

  6. Selenium webdriver Java 操作IE浏览器

    V1.0版本:直接新建WebDriver使用 import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetE ...

  7. S7:享元模式 Flyweight

    运用共享技术有效的支持大量细粒度的对象. 应用场景: A.减少对相同对象的重复创建 UML: 示例代码:如果在工厂中,有用户,我们就直接调用,没有用户,我们就获取.减少对同一uid的user对象的重复 ...

  8. react-native + react-native-tab-navigator 实现 TabBar

    1.安装 react-native-tab-navigator yarn add react-native-tab-navigator 2.页面调用 /** * 主页面 */ import React ...

  9. android:numColumns="auto_fit" 失效问题

    GridView 设置此属性无效:android:numColumns="auto_fit" ,请确认已经设置过 android:columnWidth="*dp&quo ...

  10. java 学习帮助

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今 天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来 ...