汇编与VC (c or c++)之间的嵌套调用

这篇博客介绍了如何在VC环境下编写DLL,以便被汇编语言程序调用,同时也探讨了汇编语言如何生成DLL以实现与VC的交互。通过实例展示了汇编与C/C++之间的嵌套调用技术。
摘要由CSDN通过智能技术生成

第一:VCDll  asm调用

Dll:

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call,

                       LPVOID lpReserved)

{return TRUE;}

extern "C" int sortBuf(char* pBuf)

{…函数实现}

DEF:

EXPORTS

    sortBuf @1

编译后生成xx.dll 和对应的xx.lib文件

 

Asm调用

关键1:

Includelib xx.lib

关键点2:

sortBuf proto C :DWORD 

调用invoke sortBuf,offset g_StrBuf

 

总结 最主要的有以下几点

1:dll与调用模块命名约定和函数的调用约定要相同

  一般dll中在函数前用extern "C"修饰 ,

2:如果在dll中使用__cdcel调用约定 则在asm中声明时需要用 C 修饰 

   因为asm中通过.model flat,stdcall 说明了默认的调用约定为__stdcall

3:asm中包含xx.lib头文件

 

 

第二:asm生成dll

Asm Dll

;ASM版汇编

.386

.model flat,stdcall

option casemap:none

 

   include windows.inc

   include user32.inc

   include kernel32.inc

  

   includelib User32.lib

   includelib kernel32.lib

 

 

.code

;DllMain必须的 而且 end DllMain也是必须的

DllMain proc  hModule:DWORD,ul_reason_for_call:DWORD,lpReserved:DWORD

    ret   

DllMain endp

 

;导出函数

ShowMsg proc lpText:DWORD,lpCaption:DWORD

    invoke MessageBox,NULL,lpText,lpCaption,MB_OK

ShowMsg endp

 

end DllMain

 

Def文件

EXPORTS

      ShowMsg   @1

链接后产生.dll.lib文件

关键部分 :ASMdll.asm 编译后 Asmdll.obj asmdll.def的链接语句如下

link32 /DLL /subsystem:windows /def:asmdll.def asmdll.obj

注意:asm默认生成的函数是__stdcall约定 所以在使用dll时应该注意

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值