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

最新文章

  1. mysql 赋予用户权限
  2. myeclipse性能优化
  3. CentOs笔记
  4. 通过分析iframe和无阻塞脚本关系能让我们更懂iframe
  5. 将u盘的文件复制到虚拟机上的linux系统上面—》文件挂载(文字+图解)
  6. [课程相关]homework-08
  7. [codevs1380]没有上司的舞会
  8. IBM发布AppScan Source 8.7:减少iOS企业级应用安全风险
  9. 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
  10. oracle11g 导入空表的办法
  11. BZOJ 1588: Treap 模板
  12. [LeetCode]题解(python):077-Combinations
  13. URL中有中文字符,转码方法
  14. iOS调用另一个程序
  15. lua 运算符
  16. jquery系列教程1-选择器全解
  17. DiscuzX2.5,X3.0,X3.1,X3.2完整目录结构【模板目录template】
  18. vue-cli创建的项目的目录结构及说明
  19. 迁移ORACLE_HOME引发的登录sqlplus无法加载类库错误
  20. 了不起的Node.js--之二

热门文章

  1. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.1.安装并配置ASM驱动
  2. Hadoop之Hbase详解
  3. SQL Server 高性能写入的一些经验总结
  4. 2015 Multi-University Training Contest 1记录
  5. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何查看错误代码
  6. 被动信息收集1——DNS基础 + DNS解析工具 NSLOOKUP使用
  7. 用shell查找某目录下的最大文件(转)
  8. Qt Creator项目中使用qss
  9. Cookie小案例-----记住浏览过的商品记录
  10. iOS开发-发送邮件(E-mail)方法整理合集(共3种)