互相调用其实挺方便的,只要生成.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;
}
运行结果如下图