OJODIGITAL |
|
|
|
| Bugs y problemas de funcionamiento Para tratar fallos y problemas de funcionamiento |
![]() |
|
|||
|
Problemas de funcionamiento con Windows Vista 64 bits
En este hilo había comentado que el programa de prueba puesto por ManuelLlorens no me funcionaba en Vista 64 bits.
Lo he sacado del hilo para no seguir mezclando teman en él. Este es el mensaje original: Cita:
Cita:
En cuanto pueda intentaré compilar el ejecutable como me dices. En casa el enlace sí que me funciona y lo he podido descargar, pero el programa no funciona. Como dije anteriormente tengo el error de BadFormatException cuando le doy al botón de Revelar (es decir cuando intenta cargar la librería de 32 bits dcRaw_DLL.dll. Por cierto, ahora que lo pienso... ¡¡Es el mismo error que me daba a mi con la dll de prueba que creé yo para probar lo de capturar la salida stdout!! mmmm... estoy un poco sin ideas. No es posible que Vista 64 no pueda cargar dll de 32 bits porque entonces no funcionarían el 99% de los programas existentes. Algo se me escapa, per no sé que puede ser. _________________________________ Bueno, ¡Feliz fin de semana! Me voy de fin de semana. Seguro que cuando vuelva a conectarme ya no tendrá nada que hacer porque ya habréis acabado el programa xD Última edición por ariznaf; 10-may-2008 a las 11:43. Razón: Fusión automática de mensajes para prevenir autosubir post |
| Publicidad |
|
||||
|
Bájate DEV C++ desde este enlace. Lo instalas, creas un proyecto de consola en C o en C++ con todo por defecto y ejecutas a ver si va. Si va entonces se arreglará recompilando en tu máquina la DLL, si no va habrá que bucear en los foros de DEV C++ o de MinGW a ver qué dice de usarlo en Vista 64.
Otras opciones incluyen pasarlo a cygwin, en ello estoy, pasarlo a VC++ o que te instales en tu máquina una virtual con un XP y pruebas ahí dentro, es cutre, pero funcionaría de momento. Un saludo: |
|
|||
|
En Windows Vista 64, parece que DEV C++ no funciona bien, al compilar siempre me da el siguienter error:
Compiler: Default compiler Building Makefile: "C:\dcraw\Makefile.win" Executing make... make.exe -f "C:\dcraw\Makefile.win" all gcc.exe -c dll.c -o dll.o -I"C:/Dev-Cpp/include" -DBUILDING_DLL=1 -lm -DNO_LCMS -DNO_JPEG -D_MINGW_ -w -fexpensive-optimizations -O1 gcc.exe: installation problem, cannot exec `cc1': No such file or directory make.exe: *** [dll.o] Error 1 Execution terminated Al final estoy compilando con Window XP en una maquina virtual. |
|
|||
|
Eduardo, ese error parece que se debe a que el gcc itenta lanzar otro proceso que no encuentra (cc1 seguramente sea el preprocesador del compilador de C). Comprueba que cc1.exe esté en el directorio donde se instala el compilador. Si está comprueba que el direcotior esté en el path (variable de entorno PATH).
_________________________________ Yo tengo el mismo problema, compilando desde el entorno DEV-C++ cc1.exe están dentro del subdirectorio de Dev-C++ en libexec\mingwin\gcc\3.4.2 Por algún motivo parece que el compilador de gcc no va a buscarlo en ese directorio, que es diferente de donde se encuentra el propio gcc (en el subdirectorio bin). _________________________________ Creo que ya sé por qué no funciona en Vista 64 bits. Según he estado leyendo, en Vista 64 (y creo que también en XP 64) una aplicación de 32 bits sólo puede cargar dll de 32 bits y una aplicación de 64 bits sólo puede cargar dll de 64 bits. Ahora bien, dcraw_dll es de 32 bits (la hemos compilado para 32 bits), pero perfectRAW ¡¡ES DE 64 BITS!! Bueno en realidad no es de 32 ni de 64, es un byte code de una máquina virtual que funciona por tanto en cualquier tipo de arquitectura que la soporte. Pero la máquina virtual que corre la aplicación C# (perfectRaw en este caso) en Vista 64 es lógicamente de 64 bits (.NET framework tiene instalaciones separadas para 64 bits). Por tanto dicha máquina virtual no puede cargar código de 32 bits. La solución pasa por convertir dcraw a 64 bits (compilarlo como código de 64 bits). Ese en VS C++ es fácil, basta con activar la opción de generar código de 64 bits. El problema está en que no he conseguido compilar dcraw en VS. Me da un montón de errores (aunque he activado la opción de compilación de interpretar el código como C y no como C++). Me da errores de redefinición de macros, warnings de converiónd e double a float y un montón de cosas más. ¿Puede Dev-C++ generar código de 64 bits? Última edición por ariznaf; 12-may-2008 a las 00:41. Razón: Fusión automática de mensajes para prevenir autosubir post |
|
||||
|
Cita:
Casi seguro que no. |
|
|||
|
Cita:
Para comprobar lo que he dicho sobre las DLL de 32 bits que no funcionan en .NET para 64 bits, voy a probar a crear una DLL simple y un proyecto .NET que la cargue. La compilaré para 32 y 64 bits y probaré. Por cierto, he probado perfectRAW en Vista 32 (en el ordenador de mis hijas) y sí que ha funcionado. _________________________________ Tal y como comenté el problema parece estar en la Máquina virtual CLR de Microsoft. He encontrado en MSDN un artículo que habla sobre este problema (al final del artículo) y la creación de una DLL en 64 bits. Parece ser que desde .NET Framework 2.0 la máquina virtual en Vista 64 es de 64 bits. La máquina de 64 bits no puede cargar dll de 32 bits. Pero existe una opción de compilación /platform en C# (en el los lenguajes .NET) que fuerza a que el ejecutable sea cargado en la máquina de 32 bits bajo WOW64. Puedes leer más sobre el tema en este enlace http://msdn.microsoft.com/en-us/magazine/cc300794.aspx Como recompilar las DLL en 64 bits puede ser más delicado, hasta que se haga el port de la DLL creo que lo mejor será probar con esta opción de recompilación. Probaré a añadirla al proyecto de PerfectRaw. Última edición por ariznaf; 12-may-2008 a las 21:16. Razón: Fusión automática de mensajes para prevenir autosubir post |
|
|||
|
Ya he conseguido compilar DCRAW en Vista 64 con Dev-C++.
Se tiene que configurar Dev-C++ como indican en esta pagina http://acatlangrafico.files.wordpres...8/03/vista.pdf Tambien en los proyectos, se tienen que indicar las rutas completas de todos los ficheros y directorios. |
|
|||
|
Gracias, Eduardo:
con eso que comentas ya he podido compilar el dcraw. |
|
||||
|
¿Eso quiere decir que la DLL es de 64 bits o sólo que compila en Vista 64? Es decir, ¿correrá junto con C# de 64 bits?
|
|
|||
|
NO, Manuel, siento desilusionarte, pero es sólo que compila en Vista 64 bits bajo Dev-Cpp.
La dll generada es de 32 bits. No creo que Dev-Cpp pueda generar dll de 64 bits (aunque no lo sé con seguridad) pues no he encontrado ninguna opción relacionada con 64 bits. He generado la dll (con el código de google code) y la he utilizado con PerfectRaw con el cambio hecho en el proyecto para forzar que se ejecute en el CLR de 32 bits (/platform:x86). Ahora sí que la carga, ya no da el error de BadFormatException y llega a hacer el DCRAW_Init Pero se la pega más adelante. He estado depurando y se la pega cuando llama a DCRAW_GetInfo. No sé en qué punto porque lógicamente no puedo entrar a depurarla (pues no tiene info de depuración). |
|
||||
|
Según me dice vertex al final no subí el C# de ayer a Google Code, por eso se la pega. Voy a ver si lo consigo subir ahora.
|
|
|||
|
Probaré con la nueva versión que pusiste en el ftp de OD y ya te contaré.
_________________________________ Manuel: en lo que has puesto en el servidor ftp creo que hay un buen lio de directorios. en dcraw hay un subdirectorio Perfectraw y una solución perfectraw. Dentro de src no están los fuentes sino un .o En el directorio perfectRaw, está la solución y luego otro perfectRaw con otro directorio perfectraw y otro dcraw dentro. No se si se debió a algún error en el manejo de svn, es como si hubieras cambiado el directorio de obtención de la aplicación cada vez que lo has usado. Yo estoy usando el cliente de tortoise y resulta bastante sencillo de usar. Sólo tienes que hacer un direcotorio llamémolse PerfectDeveloper por ejemplo y hacer un checkout de todo svn/trunk enlazando con él. Haces los cambios en por ejemplo dcraw y luego seleccionas ese directorio con el botón de la derecha y haces el commit para ese directorio. Si quieres hacer el commit de todos los cambios en todos los proyectos, seleccionas PerfectDeveloper (o el directorio de tu PC en que lo hubieras descargado) y haces commit. _________________________________ Bueno, a pesar de que hay un anidamiento extraño de carpetas, la solución perfectraw funciona y permite recompilar. Lo he recompilado todo incluido el dcraw. Tal y como estaba, al ejecutar la aplicación se producía el error de BadFormat en Vista 64. Cambié la opción de plataforma de destino a x86 (dentro de las opciones de Generar del proyecto). Nuevamente la dll se carga correctamente y se ejecuta bien DCRAW_Init y DCRAW_DefaultParameters, pero al llegar a DCRAW_GetInfo se produce una excepción y el programa se la pega sin ningún error. Haciendo un seguimiento con el debugger, el error se produce al volver de DCRAW_GetInfo y siendo del tipo AccessViolation "Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada" Por tanto parece algún problema de escritura fuera de buffer o similar. Es posible que en 32 bits pase desapercibido y en 64 no. Última edición por ariznaf; 13-may-2008 a las 02:27. Razón: Fusión automática de mensajes para prevenir autosubir post |
|
||||
|
Cita:
Daniel
__________________
Retratero dominguero / Parásito fotográfico Beste mundu bat posible eta beharrezkoa da - Otro mundo es posible y necesario. Aunque parezca mentira, la cabeza sirve para algo más que para sujetar las orejas. |
|
|||
|
Hoy Manuel y yo hemos estado haciendo pruebas con el revelador en Vista 64 para intentar localizar el error. El preparaba cambios en el código y yo iba probando a ver si se producía error o no.
En primer lugar hemos descartado que el problema sea en el código de coffin, preparando una versión sin nada del código de Manuel y viendo que se mostraba la imagen sin problema. Luego hemos descartado que el problema fuera en el paso de las estructuras de datos entre C# y C, rellenando las estructuras en C y recogiéndolas en C# y viendo que los valores obtenidos eran los que se habían preparado. Así que sólo quedaba algún problema en el código que Manuel modifícó en el dcraw. Se corrieron distintas etapas del revelado que se ejecutaron perfectamente. Hemos localizado que el error se produce en la última etapa (tras la etapa 4) y antes de llamar al DCRaw_End en Vista 64. En Xp también se produce un error al llamar a DCRaw_end. Seguramente el error será el mismo para ambos casos y se tratará de algún puntero perdido. Manuel no ha conseguido todavía localizar el error, pero las pruebas realizadas lo han acotado mucho más el problema en una región del código más reducida, con lo que esperamos que la solución aparezca pronto. Os mantendremos informados. <Manuel>: el error de XP ya está solucionado, era una variable que no se reinicializaba correctamente (lo he soñado esta noche). Cuando hice el traslado de las variables globales de Coffin a mis funciones no caí en que yo mismo había añadido una variable global para saber si la tabla LUT para acelerar el cálculo de la gamma estaba ya inicializada o no. En DCRaw_End estaba liberando la memoria ocupada por la LUT, pero había olvidado marcar el flag que controla esa inicialización después, con lo que intentaba usar la LUT que no existía al revelar por segunda vez (hay un función a la que se llama desde DCRaw_Init que debe dejar la memoria y las variables como estaban la primera vez que se llamó a DCRaw, en caso contrario no funcionará bien, porque dcraw.exe se ejecuta linealmente y no está diseñado para procesar archivos de distintas cámaras sin volver a ejecutar el programa). Por tanto, en XP ya tenemos dcraw.dll sin errores ni limitaciones. Respecto a Vista 64 tengo una idea de porqué se produce el error en GetInfo(), lo demás funciona todo igual que en XP, así que si no lo logro arreglar hoy, desactivaré esa línea y podréis usarlo de momento. Hoy al mediodía enviaré una prueba a ariznaf por mail con una cosa de GetInfo() cambiada. Si funciona en Vista 64 ya está todo arreglado, en caso contrario habrá que seguir investigando, pero casi seguro que SÍ tiene que ver con el paso de estructuras entre C y C#. De un modo u otro hoy al mediodía los usuarios de Vista 64 tendréis un perfectRAW que funciona, aunque sea sin GetInfo(). Última edición por ManuelLlorens; 21-may-2008 a las 11:20. |
|
||||
|
Manuel, dónde está el link con la última versión? la de http://www.ojodigital.com/prawpblender/perfectRAW.zip me sigue dando error en Vista 32 al darle a Revelar:
Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración Just-In-Time (JIT) en lugar de a este cuadro de diálogo. ************** Texto de la excepción ************** System.AccessViolationException: Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada. en perfectRAW.Dcraw.DCRAW_GetInfo(IMAGE_INFO& info) en perfectRAW.MainForm.button1_Click(Object sender, EventArgs e) en System.Windows.Forms.Control.OnClick(EventArgs e) en System.Windows.Forms.Button.OnClick(EventArgs e) en System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent) en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) en System.Windows.Forms.Control.WndProc(Message& m) en System.Windows.Forms.ButtonBase.WndProc(Message& m) en System.Windows.Forms.Button.WndProc(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m) en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Ensamblados cargados ************** mscorlib Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- perfectRAW Versión del ensamblado: 1.0.0.0 Versión Win32: 1.0.0.0 Código base: file:///C:/perfectRAW/perfectRAW.exe ---------------------------------------- System.Windows.Forms Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- mscorlib.resources Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- System.Windows.Forms.resources Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_es_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- ************** Depuración JIT ************** Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta aplicación o equipo (machine.config) debe tener el valor jitDebugging establecido en la sección system.windows.forms. La aplicación también se debe compilar con la depuración habilitada Por ejemplo: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> Cuando esté habilitada la depuración JIT, cualquier excepción no controlada se enviará al depurador JIT registrado en el equipo en lugar de controlarlo mediante el cuadro de diálogo.
__________________
"En ocasiones veo halos." Canon EOS 350D | EOS 300 | 10-22 | 24-70 f2.8L | 70-200 f4L | 300 f4L IS http://www.guillermoluijk.com para suscribirte pulsa aquí |
|
||||
|
Cita:
Está en http://www.ojodigital.com/foro/showt...23#post2155423 Un saludo: Última edición por ManuelLlorens; 22-may-2008 a las 00:46. |
![]() |
| Marcadores |
| Herramientas | |
| Desplegado | |
|
|