Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Sistemas operativos > Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Te agradezco el enlace egostar. Curiosamente, el autor del código visto estaría en las mismas que yo, puesto que escribe algo muy similar a lo que yo mismo escribo:

Código:
   iSHerr = SHFileOperation (&shfos);
   if (iSHerr == 0)
      AfxMessageBox ("Worked fine");
   else
   {
      wsprintf (szDebug, "SHFO gave error %d", GetLastError());
      AfxMessageBox (szDebug);
   }
Bien. El caso es que, efectivamente, la función "SHFileOperation" no retornará cero en caso de error, así que el código:

Código:
      wsprintf (szDebug, "SHFO gave error %d", GetLastError());
      AfxMessageBox (szDebug);
... se ejecutaría en caso de que la función "SHFileOperation" fallase. Pero el tema está en que también aparecería un mensaje de error del sistema... sin que uno, aparentemente, pueda hacer nada por evitarlo.

Y añadiré algo más aún... haciendo algo más o menos así:

Código Delphi [-]
begin

  if SHFileOperation() = 0 then
    TNbUtilities.FijarVariable(rsVarResultadoAccion,rsValorTrue)
  else
  begin
    TNbUtilities.FijarVariable(rsVarResultadoAccion,rsValorFalse);
    TNbUtilities.FijarVariable(rsVarUltimoError,SysErrorMessage(GetLastError()));
  end;

Si no existe la carpeta a borrar (suponiendo que esto es lo que vamos a hacer), efectivamente, se ejecuta el "else" del código de más arriba, pero, ¡el mensaje que obtengo de "SysErrorMessage" es "La operación se completó correctamente"...

O sea... definitivamente algo se me escapa en todo esto. Pero gracias egostar, verás como al final sacamos algo en claro entre todos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 04-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por dec
... se ejecutaría en caso de que la función "SHFileOperation" fallase. Pero el tema está en que también aparecería un mensaje de error del sistema... sin que uno, aparentemente, pueda hacer nada por evitarlo.
Te fijaste que usa el flag FOF_NOERRORUI
Responder Con Cita
  #3  
Antiguo 05-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Seoane
Te fijaste que usa el flag FOF_NOERRORUI
Eh... pues no, la verdad. Y tiene muy buena pinta. Gracias Seoane. La probaré enseguida. Pero, sin embargo, me queda la duda de que cuando la función falla (porque no existe la carpeta a borrar) no recibo el mensaje adecuado con "GetLastError", puesto que este es "La operación se completó correctamente", cuando no es así...

Voy a probar esa "bandera". Gracias otra vez Seoane.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 05-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias Seoane. Funciona estupendamente la bandera "FOF_NOERRORUI".

Ya no muestra el mensaje de error del sistema. Peeeeeeeeeero... sigo obteniendo como "último error" un "Operación completada correctamente"... aunque ahora mismo ya no sé muy bien qué pensar de esto, puesto que estoy un poco eufórico tras haber solucionado en buena medida el asunto con la banderita de marras.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 05-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sí; los tiros van por donde apuntas Román. Se ve que la función de marras del API de Windows muestra el mensaje de error... a no ser que se indique (véase más arriba) específicamente que no muestre mensajes de error.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 05-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Al parecer GetLastError siempre regresará cero. No obstante ShFileOperation devuelve un valor distinto de cero en caso de error. De ahí puedes partir.

// Saludos
Responder Con Cita
  #7  
Antiguo 05-06-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

De ahí parto Román... o es la intención: como "ShFileOperation" retorna "no cero"... busco el error con "GetLastError", pero, no parece estar ahí.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 05-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Pues a mi lo que me preocupa es que hace esta instruccion:
Código Delphi [-]
TNbUtilities.FijarVariable(rsVarResultadoAccion,rsValorFalse);
Fíjate que la instrucción GetLastError no solo muestra el ultimo error, sino el ultimo resultado de una operación de la api. Así que si dentro de esa rutina se llama, aunque solo sea indirectamente, a una API, GetLastError nos estaría devolviendo ese resultado y no el error que nos interesa.
Responder Con Cita
  #9  
Antiguo 05-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo lo veo difícil. Imagina que tú haces una dll con una función HazEsto que hace esto:

Código Delphi [-]
function HazEsto(): Integer;
begin
  ShowMessage('Esto es un error, a ver cómo lo ocultas, je, je, je');
  Result := 1;
end;

A lo que voy es: como no provea la misma api de esa función, un mecanismo para omitir los mensajes de error, no veo por donde pueda evitarse. Bueno, yo supongo que seoane puede inyectar un código a shellapi, pero habrá que esperar a que lea esto.

// Saludos
Responder Con Cita
  #10  
Antiguo 05-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja, juro que no había las dos respuestas anteriores cuando escribí la mía. Pero ya veo que sí se provee el mecanismo que mencioné.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda sobre entorno Delphi para Windows Vista geru_deusto Varios 9 12-01-2007 13:07:12
Tratamiento de Errores jsc Varios 2 15-09-2005 16:20:01
Siguen Errores de CORBA con Windows ME zuriel_zrf Providers 0 11-08-2004 08:35:34
conectar Firebird bajo entorno windows djavier22 Firebird e Interbase 2 05-07-2004 20:10:07
Tratamiento de la Voz muli Varios 0 03-11-2003 19:46:53


La franja horaria es GMT +2. Ahora son las 19:55:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi