java vc 混合编程,asm c vc2017 混合编程互相调用

只要在属性-链接器-输入-附加依赖项,加入需要的obj即可链接进去,支持通配符,如:f:\dir\*.obj

汇编中的变量常量需要用public列出来,函数不需要,因为直接就是public的,直接可以通过extern ...  (c++用extern "C" ... )进行调用。

x64的通过 extern fn:proc 即可调用c或其它obj的fn,比如:

;hello64.asm

extrn MessageBoxA : proc

extrn ExitProcess : proc

.data

text db 'Hello world!', 0

caption db 'Message', 0

.code

main proc frame

sub rsp, 28h

.allocstack 28h

.endprolog

xor r9, r9 ;MB_OK

lea r8, caption ;lpCaption

lea rdx, text ;lpText

xor rcx, rcx ;hWnd

call MessageBoxA

xor rcx, rcx

call ExitProcess

add rsp, 28h

main endp

end

x86的通过 fn proto即可调用c或其它obj的fn,如果是api,要加stdcall,和后面的原型,比如:

;hello32.asm

.386

.model flat

MessageBoxA proto stdcall hwnd:dword, text:dword, caption:dword, buttons:dword

ExitProcess proto stdcall exitcode:dword ;实际上这里的原型有的可以随意填,有的却必须保持一致,大概有overload,比如下面(GetProcAddress GetCurrentProcess 这两个就必须跟原型一致):

GetModuleHandleW proto stdcall void:dword

DeleteCriticalSection proto stdcall void:dword

InitializeCriticalSection proto stdcall void:dword

EnterCriticalSection proto stdcall void:dword

LeaveCriticalSection proto stdcall void:dword

GetSystemInfo proto stdcall void:dword

GetProcAddress proto stdcall handle:dword,procname:dword

GetCurrentProcess proto stdcall

.data

text db 'Hello world!', 0

caption db 'Message', 0

.code

main proc

push 0 ;MB_OK

push offset caption ;lpCaption

push offset text ;lpText

push 0 ;hWnd

call MessageBoxA

push 0

call ExitProcess

main endp

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值