第一:VC写Dll 供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时应该注意 |
这篇博客介绍了如何在VC环境下编写DLL,以便被汇编语言程序调用,同时也探讨了汇编语言如何生成DLL以实现与VC的交互。通过实例展示了汇编与C/C++之间的嵌套调用技术。

被折叠的 条评论
为什么被折叠?



