|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Eternal Idol
Páginas: 1 ... 66 67 [68] 69 70 ... 205
1676
« en: Lunes 3 de Diciembre de 2007, 21:21 »
Cual es EXACTAMENTE la linea desde donde se deberia mandar y la linea desde la cual se deberia recibir ese dato.
PD. ¿Que es PC.? Lo cambie por localhost asi no me tiraba una excepcion ...
1677
« en: Lunes 3 de Diciembre de 2007, 09:29 »
intente hacer eso y da el mismo resultado http://www.ctyme.com/intr/rb-2791.htmNo depure el programa, en realidad ni siquiera intente ensamblarlo, solo vi eso que era muy evidente. De hecho yo tambien pense lo mismo, por que el profe solo asi lo hizo y no nos explico bien, pero despues de indagar tengo una respuesta, cuando se define una variable de tipo LABEL, esta se comporta como una estructura en C. Cuando se llama al servicio 0AH del DOS para leer una cadena se tiene esto: Como dije no lo veia, aunque claro que ahora viendo la documentacion tambien se hace evidente: http://www.ctyme.com/intr/rb-2563.htm#Table1344Y hacerca de mi problema inicial sobre el error al escribir en el archivo, ya lo he solucionado, no de la mejor manera que yo hubiera querido, pero almenos ya quedo, aunque no me doy por vencido y sigo practicando Si, lo solucionaste solo permitiendo 10 caracteres (pasando ese valor a la funcion de lectura) pero lo podrias solucionar facilmente introduciendo una variable que guardara el valor devuelto en AX en la lectura (cantidad de bytes leidos) y usando eso en lugar de LONGMAX en FPUT.
1678
« en: Lunes 3 de Diciembre de 2007, 00:35 »
No entiendo, y el .obj, ¿donde está? Quiero creer que el codigo es un archivo .asm, si esto es asi cuando ejecutes ml codigo.asm se generara el archivo codigo.obj, ese es el trabajo del ensamblador.
1679
« en: Lunes 3 de Diciembre de 2007, 00:02 »
MASM ensambla ese codigo correctamente.
1680
« en: Domingo 2 de Diciembre de 2007, 14:22 »
Si todo eso compila cuando pueda le dare una ojeada ya que ahora no tengo nada de tiempo. Igual te recomiendo que lo depures, si decis que escribe la linea en la pantalla fijate que pasa con lo que se supone que deberia enviar por el socket. Comproba que haga el send ... y que valor devuelve claro.
1681
« en: Domingo 2 de Diciembre de 2007, 13:14 »
De nadas, mientras se pueda, aca estamos
1682
« en: Domingo 2 de Diciembre de 2007, 11:15 »
Eso con VC++ no compila (no existe ninguna version 2006 del Visual Studio). El primer problema es que usas iostream.h, debe ser iostream nada mas. Intentas acceder directamente a cout y endl sin especificar el namespace, tenes dos posibilidades o using namespace std; o en ambos le antepones el namespace. STD_OUTPUT_H ANDLE supongo que sera un error de copiado (va todo junto). Despues el codigo esta malformado y no esta identado con lo cual es dificil ver donde esta el problema (que no permite compilar pese a solucionar lo anterior) a menos que lo hagamos nosotros. ¿Que significan esas variables? ¿No te parece que son poco descriptivas? Mejor depuralo, sos el unico que sabe a que se refiere el programa.
1683
« en: Domingo 2 de Diciembre de 2007, 10:01 »
Si te referis a esta entonces desactiva el antivirus, ahi tenes de sobra para empezar tanto en NASM como MASM.
1684
« en: Sábado 1 de Diciembre de 2007, 21:41 »
pensaba que estaba creando la variable dato y asignandole una posicion en memoria. Algo asi como reservar memoria para un puntero en C, y que luego con
le daba el valor 23. Entonces, ¿no hace falta reservar memoria primeramente?
Ese codigo es equivalente a declarar una variable global de tipo unsigned char en C. unsigned char dato1 = 0x35; que obviamente es lo mismo que unsigned char dato1 = 53; Con eso tendras un campo reservado en la seccion de datos del programa. Segun me dices tambien, la inicializacion la he hecho a 53 en decimal, pero...¿la "h" (53h) que hay detras no indica que la inicializacion la estaria haciendo en hexadecimal? No tenes 53h sino 35h que es 53, 53h es 83. Fijate bien eso ya que antes pusiste 10h, eso es 16 y en realidad querias 10 que es Ah.
1685
« en: Sábado 1 de Diciembre de 2007, 21:03 »
este codigo de aqui abajo creo que inicializa la variable dato1 a 23, ¿es correcto? Le asigna el valor 23 (mov dato1, 23), al declararla la inicializas a 53 (35 en hex) no se con que objeto. Ahora me gustaria poder sacar por pantalla el contenido de dato1. Tanto el hexadecimal como en binario. ¿Como se hace? Tenes que buscar los servicios que quieras usar (ya sea de la BIOS o de MS-DOS) para imprimir en pantalla (hay servicios para imprmir un caracter o una cadena). Cuando aprendas a trabajar con ellos sabras que lo que usan como input son codigos ASCII en definitiva, entonces sabras que tu numero entero lo tenes que transformar en caracteres para poder mostrar en pantalla. Hay varios hilos donde ya se habla de este tema en el foro, seguramente te seran de ayuda.
1686
« en: Sábado 1 de Diciembre de 2007, 18:16 »
Asi lo que tenes es declarado un array de 16 bytes (h=hex) cuyo valor sera indefinido. Una manera de darle valores directamente es esta: campo db 10 dup(0,1,2,3,4,5,6,7,8,9)
Para trabajar con el array no tenes mas que poner su direccion en un registro (eax por ejemplo) y direccionarlo. Esto que te muestro lo podes usar para asignarle valores o leerlos: mov eax, offset memo;le asignamos a eax la direccion de tu array mov byte ptr [eax+4], 234;escribimos en el 5 elemento del array el valor 234 mov cl, byte ptr [eax];leemos el valor del primer elemento del array
Con eso tendrias que ser capaz de arreglarte solo.
1687
« en: Sábado 1 de Diciembre de 2007, 03:01 »
deadly idol, Deja de estarte quejando y llorar como niño porque te dicen la verdad, y en lugar de borrar mensajes que te dicen la verdad o aquellos que denuncian tu actitud apatica con la que tratas a los usuarios aqui, ponte hacer tu labor, claro.... si es que sabes como hacerla. ¿Es todo lo que tenes para decir? ¿No sos capaz de responder a nada de lo que dije? No me sorprende, debes haber roto todos los records habidos y por haber con esta catarata de mensajes inutiles, te felicito. ¿Llorar como niño? Utilizar mis argumentos solo demuestra tu incapacidad. ¿Mensajes que dicen la verdad? Por favor, no me hagas perder mas el tiempo. ¿Que denuncian mi actitud apatica? Esto ya es hilarante, sino te gusta andate, nadie va a perder nada si se acaba tu molesta presencia. Tu aporte a este foro es nulo. Al menos ahora este usuario podra ensamblar su codigo cosa que antes no podia hacer y no va a ser gracias a vos. Eso nos demuestra quien es realmente el pobre infeliz que solo puede hacer comentarios y quejarse como un bebe caprichoso.
1688
« en: Sábado 1 de Diciembre de 2007, 01:14 »
@LEX, ves lo que les dije en los comentarios que este inutil me borro? Tal como en este mensaje NADA que merezca ocupar lugar en el foro. Es un inutil que solo sabe decir ESTUPIDECES. Estas a NADA de que te denuncie al administrador. si HAces una pregunta pequeña, el tipo este idol dice que son preguntas bobas, si haces preguntas dificiles se justifica y dice que no hacen en este foro tareas (por supuesto qu eno sabe que mas responder por su ignorancia) ysi haces una pregunt a interesante o larga ocmo la tuya el tipo se justifica diciendo que es muy largo el problema que no vengas aqui a que te hagan el codigo. ¿Preguntas interesantes? ¿Como saber la hora y la fecha? ¿Leyendo la BIOS? ¿Con la API de Windows? Disculpame pero eso no tiene la mas minima importancia. ¿Arreglar una calculadora hecha de pedazos de codigo? Perdon pero prefiero invertir mi tiempo en otras cosas. Que dice esto? que el tipo NO SIRVE PARA NADA AQUI. Si vos servis para algo sinceramente lo disimulas muy bien. no se quien lo admitio de moderador, por que este tipo tiene la misam funcion que ";" en ASSEMBLY, .... puro comentario, solo para eso sirve el tipo ALGUIEN CORRA A ESTE TIPO DE AQUI.... va a quitar la motvacion de aprender este lenguaje a los NEWBIS como dice el probre ignorante. NO sabe ni siquiera usar su lengua materna. El administrador del foro, igual que para el foro de C/C++, por algo sera. Mientras que vos sos solo un troll en este foro. Tu aporte a este foro es nulo. Al menos ahora este usuario podra ensamblar su codigo cosa que antes no podia hacer y no va a ser gracias a vos. Eso nos demuestra quien es realmente el pobre infeliz que solo puede hacer comentarios y quejarse como un bebe caprichoso.
1689
« en: Viernes 30 de Noviembre de 2007, 21:13 »
Si como decis es un vector de una clase tuya entonces el problema esta aca: vector< int>::iterator itRemove = arNumbers.begin() + posicion; Eso tenes que reemplazarlo por tu clase, siguiendo el ejemplo: vector<persona*>::iterator itRemove = todos.begin() + posicion;
1690
« en: Viernes 30 de Noviembre de 2007, 19:11 »
Esto no funciona asi, no venis aca y nos dejas un codigo larguisimo para que nosotros lo leamos, entendamos y encontremos lo/s error/es.
Para empezar ese codigo ni siquiera ensambla. No podes tener dos etiquetas con el mismo nombre, con solo ejecutar el ensamblador y pasarle el nombre del archivo te vas a dar cuenta de que estoy hablando. Despues usaste un : en vez de un ;, lo mismo, con solo ensamblar lo vas a ver. Al final agregale un end y al menos te ensamblara, entonces depuralo (con debug) y fijate que va haciendo.
1691
« en: Viernes 30 de Noviembre de 2007, 15:32 »
1692
« en: Viernes 30 de Noviembre de 2007, 13:39 »
Si la parte de Fortran y C++ funciona bien y el problema ahora es con Java yo no te puedo ayudar, no tengo experiencia ni tiempo para conseguirla. Proba a preguntar en el subforo de Java, tal vez ahi alguien sepa.
1693
« en: Viernes 30 de Noviembre de 2007, 08:09 »
Cualquier libro de assembly trae esta informacion, aca ayudamos con dudas concretas despues de que el interesado haya hecho un minimo esfuerzo. Sino sabe nada de assembly es su problema, no el nuestro.
1694
« en: Jueves 29 de Noviembre de 2007, 16:12 »
Pues he puesta la linea esta de ensamblador delante de la llamada a la función externa y obtengo el mismo error. ¿Antes o despues lo pusiste? Tiene que ser asi: tuwhbv(params); __asm sub esp, 0x38
He optado por probar el enlace dinámico y en lugar de enlazar el .lib, llamar directamente a la DLL como me has comentado. Al hacer esto, y generando mi DLL en C++, la llamo desde mi código de Java y sigo teniendo el ACCESS VIOLATION, el cambio es que el "Problematic Frame" que me da el error cambia: usando el enlace estático el problema de java apunta a la DLL que genero en C++, y usando el enlace dinámico el error de la VM me apunta como problema a la DLL de fortran. Por favor deja fuera del problema a Java, hace un programa simple que use la DLL de C++ que a su vez usa la DLL de Fortran. puedes ver en esto a lo que te refererias de la convencion de llamada? no se bien como continuar? Crees que seria una buena idea, que el cambie su proyecto para que le genere una libreria estática? de forma que quizas se cambie la forma de llamar a las librerias que utiliza? Si, me imagino que ese es el problema, al menos entre C++ y Fortran. No se si servira que genere una libreria estatica realmente, pueden hacer la prueba pero no lo se.
1695
« en: Jueves 29 de Noviembre de 2007, 10:20 »
En FPUT usas la direccion de memoria de LONGMAX, deberias usar el tamaño de la cadena a escribir, ni siquiera el valor de LONGMAX seria correcto. Ademas no veo donde estas usando BUFFER excepto en FPUT, deberias primero asignarle sus caracteres ...
Depuralo para ver esto mejor (cosa que yo no hice).
1696
« en: Miércoles 28 de Noviembre de 2007, 18:52 »
Es simple hasta cierto punto, fijate los ret, aunque al no estar completa no puedo estar 100% seguro. En este caso esta claro que las funciones de la DLL de Fortran estan usando stdcall (las que se ven al menos) y por lo tanto cuando tu ejecutable intente acomodar la pila en realidad la jodera ... En tu ejecutable, convencion de llamada C: //primero se pasan todos los parametros en la pila //se llama a la funcion (se que es esta por la cantidad ENORME - por eso decia que ese prototipo era vomitivo - de parametros) 100010A6: E8 29 60 00 00 call 100070D4 //intenta arreglar la pila pero como no es una funcion de convencion C la termina jodiendo 100010AB: 83 C4 38 add esp,38h (56/4=14 parametros) Para comprobar esta teoria podrias hacer esto en la siguiente linea justo tras llamar esta funcion: Si eso lo soluciona evidentemente NO es la forma de hacerlo y tendrias que pedirle mas explicaciones a tu amigo (si esta usando un .DEF, si puede cambiar la convencion de llamada, como esta enlazando, etc, etc, etc) o usar enlazado dinamico  De esta manera: typedef void (__stdcall *tuwhbv_ptr)(long,float&,float&,float&,float&,float&,float&,float&,float&,long,float&,float&,float&,float&); tuwhbv_ptr tuwhbv = 0; Despues en donde inicies usas LoadLibrary para cargar la DLL en cuestion y GetProcAddress para obtener la direccion de la funcion que se la asignaras a tuwhbv. De esa manera al usar stdcall no deberia dar ningun fallo.
1697
« en: Miércoles 28 de Noviembre de 2007, 15:44 »
Yo he buscado y de momento no he encontrado nada claro.
Agradecería que aportasen cuando encuentren cosas concretas Esta pagina seguramente te sea de ayuda.
1698
« en: Miércoles 28 de Noviembre de 2007, 14:27 »
Pues al final ha funcionado, con la declaracion extern "C" { void _imp_tuwhbv(long,float&,float&,float&,float&,float&,float&,float&,float&,long,float&,float&,float&,float&); };
ha linkado bien y me ha generado la DLL. Ahora ya estoy en "otro nivel"  despues de general esta DLL y ejecutar el código desde java que llama indirectamente a l de fortran a traves de este método obtengo un "EXCEPTION_ACCESS_VIOLATION" que creo que debe ser algo con el paso de parametros y punteros con los que no trabajaba desde hace mucho tiempo. Si, me imagine que con eso la iba a resolver si o si pero como decis tenes una excepcion no controlada que tal vez este relacionada con lo que te decia antes: la convencion de llamada de fortran. Tal vez un dumpbin /disasm de la DLL nos de una idea mas clara de que convencion de llamada usa.
1700
« en: Miércoles 28 de Noviembre de 2007, 11:11 »
debería llamar a la función con otro nombre "decorado"? algo así como imp_tuwhbv?? Es probable, la manera normal es hacer esto: extern "C" { [B]__declspec(dllimport)[/B] void tuwhbv(long,float&,float&,float&,float&,float&,float&,float&,float&,long,float&,float&,float&,float&); }; [/quote] Pero en teoria no deberia funcionar por ser lo que busca: __imp[COLOR=red]__[/COLOR]tuwhbv y lo que hay en el lib: __imp[COLOR=red]_[/COLOR]tuwhbv Asi que tal vez una forma sea: extern "C" { void _imp_tuwhbv(long,float&,float&,float&,float&,float&,float&,float&,float&,long,float&,float&,float&,float&); #define tuwhbv _imp_tuwhbv };
No se que convencion de llamada usa FORTRAN ... asi que puede fallar tranquilamente sino usa C. La persona encargada de esta DLL seguramente sabra mas al respecto, por cierto ese prototipo es vomitivo ...
Páginas: 1 ... 66 67 [68] 69 70 ... 205
|
|
|