Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 15-03-2004
islu islu is offline
Miembro
 
Registrado: jun 2003
Posts: 111
Poder: 21
islu Va por buen camino
Perdón, no os he dicho que antes de reemplazar el fichero, debéis estar fiuera de Delphi.

Muchas gracias de nuevo.
Responder Con Cita
  #22  
Antiguo 15-03-2004
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
Pues no sé qué decirte.

El icono que mandas no me causa ningún problema ni en Windows XP ni en Windows 2000.

Si dices que tan sólo poniendo este icono te causa problemas yo más bien sopecharía, como te indicó anteriormente marcoszorrilla de la tarjeta gráfica de la pc.

Por cierto, ¿podrías indicar exactamente qué dice la línea de código en la ventana del cpu cuando se detiene la ejecución?

// Saludos
Responder Con Cita
  #23  
Antiguo 15-03-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues acabo de hacer la prueba y funciona perfectamente.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #24  
Antiguo 15-03-2004
islu islu is offline
Miembro
 
Registrado: jun 2003
Posts: 111
Poder: 21
islu Va por buen camino
Es que no llega a sacarme ninguna línea, nada mas pulsar F9, me aparece la pantalla de CPU, la segunda línea menciona a ntddl.DbgUserBreakPoint, y el resto comandos tipo int,mov, etc..

Muchas gracias por vuestro interés, lamento el tiempo que os estoy robando.
Responder Con Cita
  #25  
Antiguo 15-03-2004
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
Vamos a intenta algo desesperado.

Coloca este código en la sección initialization de tu formulario y dinos si se corrige el problema al correr la aplicación desde el IDE.

Código:
procedure PatchINT3;
var
  NOP : Byte;
  NTDLL: THandle;
  BytesWritten: DWORD;
  Address: Pointer;

begin
  if Win32Platform <> VER_PLATFORM_WIN32_NT then Exit;
  NTDLL := GetModuleHandle('NTDLL.DLL');
  if NTDLL = 0 then Exit;
  Address := GetProcAddress(NTDLL, 'DbgBreakPoint');
  if Address = nil then Exit;
  try
    if Char(Address^) <> #$CC then Exit;

    NOP := $90;
    if WriteProcessMemory(GetCurrentProcess, Address, @NOP, 1, BytesWritten) and
      (BytesWritten = 1) then
      FlushInstructionCache(GetCurrentProcess, Address, 1);
  except
    //Do not panic if you see an EAccessViolation here, it is perfectly harmless!
    on EAccessViolation do ;
    else raise;
  end;
end;
// Saludos
Responder Con Cita
  #26  
Antiguo 16-03-2004
islu islu is offline
Miembro
 
Registrado: jun 2003
Posts: 111
Poder: 21
islu Va por buen camino
Perdona, pero no se como hacerlo. :-(

Puedes indicarme como, por favor.

Muchas gracias.
Responder Con Cita
  #27  
Antiguo 16-03-2004
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
Ese código está algo raro, yo lo sé. Deja te cuento el por qué.

Desde que comencé a usar Delphi en Windows 2000 y ahora en Windows XP me sucedían ocasionalmente comportamientos similares al que te sucede a tí aunque en otros casos; a veces colocando un ListView, a veces con un ImageList, etc.

Estuve buscando en la red y me encontré que esto del ntdll.DbgUserBreakPoint es conocido; al parecer algún programador en Microsoft se dejó una instrucción INT3 (punto de corte o 'break point') en el código de la librería ntdll.dll

El código que te puse lo publicó Peter Morris (conocido e los grupos de noticias de Borland) en http://www.howtodothings.com/showart...sp?article=654 y, en efecto, soluciona el problema.

No expliqué esto antes porque no sé a ciencia cierta si eso es lo que ocurre. Lo que sí es cierto, es que, de ser éste el problema, entonces no tienes de qué preocuparte ya que sólo se presenta cuando estás haciendo un 'debug' de la aplicación y no ya en ejecución.

Para usarlo simplemente pégalo en la sección initialization del formulario:

Código:
unit Unit1;

interface

uses
  bla, bla, bla;

type
  TForm1 = class(TForm)
  end;

var
  Form1: Form1;

interface

procedure PatchINT3;

{ 
  Aquí pegas el código 
}

initialization

// Llamada al procedimiento
PatchINT3;

end.
Si no es eso pues ya buscaremos por otro lado.

// Saludos
Responder Con Cita
  #28  
Antiguo 17-03-2004
islu islu is offline
Miembro
 
Registrado: jun 2003
Posts: 111
Poder: 21
islu Va por buen camino
Primeramente muchísimas gracias por todo el interés que os estais tomando; y lamento el tiempo que os estoy robando.

Por lo que me dices creo que ese es mi problema, pero es que no se donde ponerlo, pues la aplicación no llega ni a arrancar, en el "Application.Initialize;" he puesto un break point, y me sale antes de llegar a este punto.

Muchas gracias por vuestro interés.
Responder Con Cita
  #29  
Antiguo 17-03-2004
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
Cita:
Empezado por islu
pues la aplicación no llega ni a arrancar, en el "Application.Initialize;" he puesto un break point, y me sale antes de llegar a este punto.
Quizá no lo sepas pero el código que tú ves en el archivo .dpr no es lo primero en ejecutarse. Hay de hecho muchísimo código que se ejecuta antes de llegar siquiera al primer begin.

Para empezar está todo el código de la unidad System, la única unidad omnipresente en Delphi, y luego todo el código de las secciones initialization de cada una de las unidades incluidas en el proyecto, tanto las que uno pone explicitamente como las que son incluidas dentro de otras, y creeme, son muchísimas.

De hecho, si te fijas, la primera línea de código en el archivo .dpr,

Application.Initialize

hace referencia a un objeto, Application. Como todo objeto en Delphi, éste debe ya estar creado antes de llamar a ninguno de sus métodos. Tal objeto se crea en la sección initialization de la unidad Forms.

El tipo de error al que te enfrentas seguramente se genera en alguna de estas secciones, razón por la cual jamás se llega ni siquiera al begin del dpr.

Puedes de hecho hacer un debug de todo esto habilitando la opción "Use debug dcus" en Project|Options|Compiler y comenzando la ejecución con F8 y continuando paso a paso con F7. Incluso, si uno es suficientemente paciente, es posible que alcances a ver el punto casi exacto donde se produce el error.

Pero antes de tal aventura, haz el experimento tal como te indiqué tan sólo para ver si por ahí va el problema. Más aún, dado que el error podría estarse produciendo antes de que se ejecuta la sección initialization del formulario sería mejor que crees una unidad nueva con sólo dicho código:

Código:
unit TestPacthInt3;

interface

implementation

procedure PatchINT3;
var
  NOP : Byte;
  NTDLL: THandle;
  BytesWritten: DWORD;
  Address: Pointer;

begin
  if Win32Platform <> VER_PLATFORM_WIN32_NT then Exit;
  NTDLL := GetModuleHandle('NTDLL.DLL');
  if NTDLL = 0 then Exit;
  Address := GetProcAddress(NTDLL, 'DbgBreakPoint');
  if Address = nil then Exit;
  try
    if Char(Address^) <> #$CC then Exit;

    NOP := $90;
    if WriteProcessMemory(GetCurrentProcess, Address, @NOP, 1, BytesWritten) and
      (BytesWritten = 1) then
      FlushInstructionCache(GetCurrentProcess, Address, 1);
  except
    //Do not panic if you see an EAccessViolation here, it is perfectly harmless!
    on EAccessViolation do ;
    else raise;
  end;
end;

initialization
  PatchInt3;
end.
Así, tal cual. Copia, pega y guarda el archivo.

Incluye la unidad al principio de la cláusula uses del dpr:

Código:
program Project1;

uses
  TestPatchInt3,
  Forms,

  etc.
...
para que sea la primera en ser procesada, aún antes de la unidad Forms.

// Saludos
Responder Con Cita
  #30  
Antiguo 17-03-2004
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
Luego de recorrer un rato los grupos de noticias de Borland estoy más convencido de que el problema se debe a lo que te he comentado. Algunos mensajes en dichos grupos hacen referencia explícita al uso de iconos con más de 16 colores.

Yo no me preocuparía mayormente, el hecho de que la aplicación se detenga en DbgUserBreakPoint significa que eso sólo ocurrirá al hacer un "debug" de la aplicación. Por cierto que, contrario a lo que se dijo en el primer mensaje de este hilo así como en su título, esto no es una excepción, es un "breakpoint" como el que podríamos nosotros poner en otras partes del código.

Algunas personas comentan que el problema se arregla instalando el service pack 2 de windows 2000 aunque otros afirman que ni con eso. De cualquier manera no está de más que te asegures de tener el último service pack instalado.

// Saludos
Responder Con Cita
  #31  
Antiguo 18-03-2004
islu islu is offline
Miembro
 
Registrado: jun 2003
Posts: 111
Poder: 21
islu Va por buen camino
GRACIIIIIAAAAAAAAAAAAAAASSSSSSSSSSSSS !!!!!!!!!

Por fin, ya me funciona, con la función PatchINT3, implementada como una unit nueva, puesta en primer lugar en el uses del dpr; tal y como me has indicado Roman.

Mil gracias, de verdad, mil gracias.

Espero que además de a mi, esto sirva a alguién más. Por cierto, tengo el Service Pack 2, y pese a ello seguía pasando.

GRACIAS.
Responder Con Cita
  #32  
Antiguo 18-03-2004
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
Cita:
Empezado por islu
Por cierto, tengo el Service Pack 2, y pese a ello seguía pasando.
¡La de virus que has de tener en tu máquina!

¡A qué esperas y ponle ya el sp4!

Y cuando lo hagas vuelve a probar quitando PatchInt3 a ver si Microsoft corrigió el problema en este service pack.

// Saludos
Responder Con Cita
  #33  
Antiguo 02-12-2004
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Yo no consigo que ese procedimiento me funcione y estoy hasta las narices de microsoft y sus puntos de ruptura, alguien me puede echar un cable? Me falta ponerme a llorar.

Gracias
Responder Con Cita
  #34  
Antiguo 02-12-2004
islu islu is offline
Miembro
 
Registrado: jun 2003
Posts: 111
Poder: 21
islu Va por buen camino
Hola a mi si me funciona, te cuento como lo he puesto.

1- He añadido el TestPacthInt3.pas al proyecto

2- Luego, he edité el fuente del proyecto ( Project-> View Source )

3- Pusé el TestPacthInt3.pas el primero, ya que el por defecto lo puso al final, y quedó asi :

program EJEMPLO;

uses
TestPacthInt3 in 'TestPacthInt3.pas',
Forms,
[...]

Con esto se me solucionó. Espero que te funcione.
Responder Con Cita
  #35  
Antiguo 02-12-2004
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
mi problema con esa unidad (TestPacthInt3.pas) es que al compilar el proyecto me da problemas ya que no encuentra un montón de cosas (utilizo delphi 7) y por ejemplono encuentra o reconoce lo siguiente

VER_PLATFORM_WIN32_NT
GetModuleHandle('NTDLL.DLL');
GetProcAddress(NTDLL, 'DbgBreakPoint');


con lo cual no puedo meter esa unidad tal cual y hacer lo del proyecto.

sabeis por qué puede ser?
Responder Con Cita
  #36  
Antiguo 02-12-2004
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Solucion Definitiva

d7_ent_upd1_1.exe

Buscar este fichero en la página de Borlan, así se soluciona.

Gracias a todos.
Responder Con Cita
  #37  
Antiguo 20-08-2010
Avatar de Rodrigo_I
Rodrigo_I Rodrigo_I is offline
Miembro
 
Registrado: oct 2007
Ubicación: Santiago,Chile
Posts: 15
Poder: 0
Rodrigo_I Va por buen camino
a mi me sirvio con D7 y el Service Pack 3 de XP

solo agregar que se debe poner : uses Types, SysUtils, Windows;
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 01:47:09.


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