win32汇编和c/c++的相互调用

互相调用其实挺方便的,只要生成.obj,然后声明需要使用的api,就可以调用了

汇编调用c

add.c

int Myadd(int n1, int n2)
{
  return n1 + n2;
}

1在目录C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin>中用cl.exe 编译add.c生成add.obj文件
2在汇编工程中 右键选择导入–目标文件 把add.obj导入进汇编工程
3编译连接,执行exe程序
汇编代码如下

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive


;include msvcrt.inc
;includelib msvcrt.lib

printf proto c

includelib LIBC.LIB

.const 
  MSG1  db "1+2=%d", 0

.code

Myadd proto c, :dword, :dword

main proc c
  
  invoke Myadd, 1, 2
  push eax
  push offset MSG1 
  call printf
  add esp, 8
  ret

main endp

end 

运行结果如下图:
在这里插入图片描述

c调用汇编

ctoasm.Asm,编译不连接,只需要编译生成.obj文件就行

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include windows.inc
includelib msvcrt.lib
includelib user32.lib
includelib kernel32.lib

.code

MyAdd proc n1:dword, n2:dword

  mov eax, n1
  add eax, n2
  ret

MyAdd endp

end

在vs中右键工程的资源文件—添加现有项 ctoasm.obj加载进工程,然后运行exe程序
代码如下

#include "pch.h"
#include <iostream>
#include <Windows.h>

extern "C" int _stdcall MyAdd(int,int);


int main()
{
    std::cout << "value: " << MyAdd(10, 20) << std::endl;
}

运行结果如下图
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值