Título: Ayuda con el ejercicio T_T Publicado por: JorGe[xD] en 18 Septiembre 2009, 19:23 pm Hola como estan .
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 :xD una explicacion Lo 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: (http://img146.imageshack.us/img146/3193/parecido.jpg) 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 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 ? ;######################################################################### Desde ya Gracias :) PD : Estoy estudiando los manuales de RadASM + MASM ... Ejercicio 2 del Capitulo VI. Título: Re: Ayuda con el ejercicio T_T Publicado por: Eternal Idol en 18 Septiembre 2009, 21:48 pm Edit03 es un ID (un numero), no podes usar addr con el. Si lo que queres es obtener el valor de esos Edits podes usar GetDlgItemText (ahora ebx cuando llamas a dwtoa siempre es 1001 + 1002 = 2003).
Título: Re: Ayuda con el ejercicio T_T Publicado por: AleX Inc. en 18 Septiembre 2009, 23:29 pm Intenta cambiando estos valores:
Código: .if eax==Boton01 Código: .if edx==Boton01 Título: Re: Ayuda con el ejercicio T_T Publicado por: Eternal Idol en 18 Septiembre 2009, 23:31 pm 1001 + 1002 + 1003 ;)
Título: Re: Ayuda con el ejercicio T_T Publicado por: JorGe[xD] en 19 Septiembre 2009, 00:50 am Edit03 es un ID (un numero), no podes usar addr con el. Si lo que queres es obtener el valor de esos Edits podes usar GetDlgItemText (ahora ebx cuando llamas a dwtoa siempre es 1001 + 1002 = 2003). pero GetdlgItemtext no es para cadenas de texto ? osea 1001 + 1002 = 10011002 :S Me confundo mas :xD Título: Re: Ayuda con el ejercicio T_T Publicado por: YST en 19 Septiembre 2009, 02:16 am Para sacar numeros de los edit mejor usa GetDlgInt :P
http://msdn.microsoft.com/en-us/library/ms645485(VS.85).aspx Título: Re: Ayuda con el ejercicio T_T Publicado por: Eternal Idol en 19 Septiembre 2009, 09:02 am Si, pero siempre es mejor que usar el ID del control y despues sacar el numero :D 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 ...).
Tenes que obtener los dos primeros numeros y sumarlos, el valor de Edit03 lo tenes que poner vos de acuerdo al resultado de la suma y para eso vas a tener que usar un buffer (donde escribe dwtoa) y SetDlgItemText. Título: Re: Ayuda con el ejercicio T_T Publicado por: JorGe[xD] en 22 Septiembre 2009, 01:09 am Bueno es que me confundi mucho :S
por que si lees en una parte dice : Citar 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). Asi que no consideraba mas funciones ... :S ... PD : YST ... firefox no me deja entrar a Paginas de Microsoft :S :S :S ... Gracias a los dos EDIT : Probe con Opera , IE y pasa lo mismo .. me tira error al visitar cualquier pagina raiz de Microsoft Título: Re: Ayuda con el ejercicio T_T Publicado por: AleX Inc. en 22 Septiembre 2009, 02:30 am Mmm.
Talvez podrias crear una funcion llamada "Suma", creo que describen en esos tutoriales como hacerla con ejemplo de una resta pero no estoy seguro. Creo que son asi pero no estoy seguro: Código: Suma proc cantidad1:DWORD,cantidad2:DWORD Código: Suma PROTO :DWORD,:DWORD Código: mov edx,wParam Código: .elseif edx==Boton03 ; el boton Salir Código: .elseif edx==Boton03 ; el boton Salir Título: Re: Ayuda con el ejercicio T_T Publicado por: Eternal Idol en 22 Septiembre 2009, 08:07 am Asi que no consideraba mas funciones ... :S ... A la fuerza vas a tener que usar alguna mas, de alguna manera tenes que obtener el numero (si es que lo es je) que el usuario escribe en el Edit. AleX Inc. : es lo mismo de antes pero en una funcion, la clave es que no hay que usar los identificadores (valores constantes) sino lo que el usuario haya escrito. La cosa vendria a ser algo asi (depuralo que no tengo el Ejerc2IV.inc ni muchas ganas tampoco): Código
PD. Al final ahora me doy cuenta de que ya tenes un buffer declarado en la sección de datos ;D |