Mi pequeño gran problema es ...
Que cuando compilo en RadASM ... me sale error
Ejerc2IV.asm(32) : error A2033: invalid INVOKE argument : 2
Ejerc2IV.asm(32) : error A2114: INVOKE argument type mismatch : argument : 2
Quisiera saber como solucionarlo ... o que me dean una pista
una explicacionLo que quiero hacer es :
Crear una calculadora que sume 2 cantidades, debe tener 3 campo edit
donde:
El primer y segundo campo edit.- se ingresara los valores que se va a sumar.
El tercer campo edit.- mostrara el resultado.
Ademá s debe tener 3 botones con las siguientes funciones:
El primer botón.- Debe hacer la suma.
El segundo botón.- Debe borrar todo los campos edit.
El tercer botón.- cerrar la ventana.
Para desarrollar este programa es necesario usar lo siguiente:
1.- la funciones atodw y dwtoa descritas en el capitulo III.
2.- Debes usar la instrucción add (suma).
Se pide el resultado en decimales, la idea es algo parecido a esta:

Archivo Ejercicio2VI.ASM :
Citar
.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include Ejerc2IV.inc
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
invoke ExitProcess,0
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
.elseif eax==WM_COMMAND
mov edx,wParam
.if eax==Boton01 ; aqui comparo si e presionado el Boton01 que seria Sumar
;si es asi ... realiza la siguiente funcion
mov ebx,Edit01
mov eax,Edit02
add ebx,eax
invoke dwtoa,ebx,addr Edit03 ; aqui dice que esta el error ...
.elseif edx==Boton02 ; este seria el boton de Limpiar pero no se como se hace
.elseif edx==Boton03 ; el boton Salir
invoke SendMessage,hWin,WM_CLOSE,0,0
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include Ejerc2IV.inc
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
invoke ExitProcess,0
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
.elseif eax==WM_COMMAND
mov edx,wParam
.if eax==Boton01 ; aqui comparo si e presionado el Boton01 que seria Sumar
;si es asi ... realiza la siguiente funcion
mov ebx,Edit01
mov eax,Edit02
add ebx,eax
invoke dwtoa,ebx,addr Edit03 ; aqui dice que esta el error ...
.elseif edx==Boton02 ; este seria el boton de Limpiar pero no se como se hace
.elseif edx==Boton03 ; el boton Salir
invoke SendMessage,hWin,WM_CLOSE,0,0
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
Archivo Ejercicio2VI.inc :
Citar
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include masm32.inc
include rvlcnrand.Inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib masm32.lib
includelib rvlcnrand.lib
DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
.const
IDD_DIALOG1 equ 101
Edit01 equ 1001
Edit02 equ 1002
Edit03 equ 1003
Boton01 equ 1004
Boton02 equ 1005
Boton03 equ 1006
;#########################################################################
.data
.data?
buffer db 225 dup (?)
hInstance dd ?
;#########################################################################
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include masm32.inc
include rvlcnrand.Inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib masm32.lib
includelib rvlcnrand.lib
DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
.const
IDD_DIALOG1 equ 101
Edit01 equ 1001
Edit02 equ 1002
Edit03 equ 1003
Boton01 equ 1004
Boton02 equ 1005
Boton03 equ 1006
;#########################################################################
.data
.data?
buffer db 225 dup (?)
hInstance dd ?
;#########################################################################
Desde ya Gracias

PD : Estoy estudiando los manuales de RadASM + MASM ... Ejercicio 2 del Capitulo VI.





Autor


En línea








Tambien podes usar la funcion que menciono YST que hace eso mismo internamente pero si usas dwtoa supongo que no es el objetivo (tambien podrias usar SetDlgItemInt y no dwtoa en ese caso ...).
