当前位置: 代码迷 >> 汇编语言 >> 使用Radasm编译构建顺利后无法显示程序界面
  详细解决方案

使用Radasm编译构建顺利后无法显示程序界面

热度:195   发布时间:2016-05-02 04:25:39.0
使用Radasm编译构建成功后无法显示程序界面
功能是一个四则运算计算器界面如下图

--------------------------------------------------------------------------------------------------------------------------------------
主程序文件
--------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat,stdcall;
;32 bit memory model;
option casemap:none;



include caculatorone.inc


.data
add1 dword ?
add2 dword ?
sub1 dword ?
sub2 dword ?
mul1 dword ?
mul2 dword ?
div1 dword ?
div2 dword ?

.code 
start:
invoke GetModuleHandle,NULL
mov hInstance,eax

invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DLG,NULL,addr DlgProc,NULL
invoke ExitProcess,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov ebx,wParam
mov eax,uMsg
invoke GetDlgItemInt,hWin,EDIT1,NULL,TRUE
mov add1,eax
invoke GetDlgItemInt,hWin,EDIT2,NULL,TRUE
mov add2,eax
invoke GetDlgItemInt,hWin,EDIT4,NULL,TRUE
mov sub1,eax
invoke GetDlgItemInt,hWin,EDIT5,NULL,TRUE
mov sub2,eax
invoke GetDlgItemInt,hWin,EDIT7,NULL,TRUE
mov mul1,eax
invoke GetDlgItemInt,hWin,EDIT8,NULL,TRUE
mov mul2,eax
invoke GetDlgItemInt,hWin,EDIT10,NULL,TRUE
mov div1,eax
invoke GetDlgItemInt,hWin,EDIT11,NULL,TRUE
mov div2,eax
.if  ebx==PLUSBUTTON
mov eax,add1
mov ebx,add2
add eax,ebx
invoke SetDlgItemInt,hWin,EDIT3,eax,TRUE
.elseif ebx==SUBBUTTON
mov eax,sub1
mov ebx,sub2
sub eax,ebx
invoke SetDlgItemInt,hWin,EDIT6,eax,TRUE
.elseif ebx==MULBUTTON
mov eax,mul1
mov ebx,mul2
mul ebx
invoke SetDlgItemInt,hWin,EDIT9,eax,TRUE
.elseif ebx==DIVBUTTON
mov eax,div1
mov ebx,0h
mov ebx,div2
div ebx
invoke SetDlgItemInt,hWin,EDIT12,eax,TRUE
.endif
mov eax,uMsg 
.if  eax==WM_INITDIALOG

.elseif eax==WM_COMMAND

.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

DlgProc endp
end start

--------------------------------------------------------------------------------------------------------------------------------------
caculatorone.inc文件
--------------------------------------------------------------------------------------------------------------------------------------
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include msvcrt.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib msvcrt.lib

DlgProc  PROTO :HWND,:UINT,:WPARAM,:LPARAM

IDD_DLG EQU 101
EDIT1  EQU 1001
EDIT2  EQU 1002
EDIT3  EQU 1003
EDIT4  EQU 1004
EDIT5  EQU 1005
EDIT6  EQU 1006
EDIT7  EQU 1007
EDIT8  EQU 1008
EDIT9  EQU 1009
EDIT10  EQU 1010
EDIT11  EQU 1011
EDIT12  EQU 1012
PLUSBUTTON  EQU 1013
SUBBUTTON EQU 1014
MULBUTTON EQU 1015
DIVBUTTON EQU 1016

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

整个文件编译和构建都能成功,但是最后不显示程序的界面,求教
------解决思路----------------------
那不行吧,上面的代码是用 DialogBoxParam() 来显示那个计算器窗口的,意味着这个窗口的内容是应该在 rc 里定义的;如果 rc 里什么也没有,那就没有定义主窗口的对话框,那 DialogBoxParam() 就会调用失败返回了,所以,什么也没有的。