基本上与.exe文件没什么大的区别。关键是链接开关不同。要加/dll.
且dll文件如果有导出符号,则最好使用.def文件。
------------------Kaka.asm文件-----------------
.386
.model flat, stdcall
option casemap:none
include /masm32/include/kernel32.inc
include /masm32/include/user32.inc
include /masm32/include/windows.inc
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/user32.lib
;等值定义,宏定义
IDD_MAIN equ 1
IDC_BTN_TEST equ 100
.data
szTxt db 'Congratulation! Success.', 0
szTitle db 'Prompt', 0
.code
;--------------------------------------------
; DLL 入口函数,系统回调函数
;--------------------------------------------
_DllEntry proc _hInstDll:dword, _dwReason:dword, _dwReserved:dword
mov eax, TRUE ;//表示加载dll成功
ret
_DllEntry endp
_Prompt proc
invoke MessageBox, NULL, addr szTxt, addr szTitle, MB_OK or MB_ICONINFORMATION
ret
_Prompt endp
end _DllEntry
--------------------define.def文件------------------------
//
EXPORTS _Prompt
---------------------makefile文件--------------------------
#makefile 文件适用于dll
#区分大小写
#makefile文件不加扩展名
#宏定义
DLL = Kaka.dll
OBJs = Kaka.obj
RES = rsrc.res
DEF = define.def
ML_FLAG = /c /coff
LINK_FLAG = /subsystem:windows /Dll
########################################
#第一个显示规则,决定输出文件
$(DLL):$(OBJs) $(RES) $(DEF)
Link $(LINK_FLAG) /out:$(DLL) /def:$(DEF) $(OBJs) $(RES)
#$(OBJs):Kaka.inc
#--------不加命令行,这样的话,nmake会到隐含规则中去找命令行
#隐含规则
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
##################
#其它功能显示规则,用于在cmd中nmake取“假文件名”执行相应功能
#注意,在默认参数时,clean是不会执行的
clean:
del *.obj
del *.res
----------------------------资源脚本文件 rsrc.rc------------------------------
#include "/masm32/include/resource.h"
#define IDD_MAIN 1
#define IDC_BTN_TEST 100
/
//主对话框
IDD_MAIN DIALOG 10, 10, 300, 200
STYLE DS_MODALFRAME | WS_SYSMENU | WS_POPUP | WS_CAPTION
CAPTION "Kaka_001"
FONT 9, "宋体"
BEGIN
PUSHBUTTON "Test", IDC_BTN_TEST, 1, 1, 100, 25
END