FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Ahora si que va
Solo debeis hacer un projecto, con un solo form, no importa que más llevem, llamadlo Project1. Reemplazad el Project1.res que os ha generado con este.
Muchas Gracias. |
#2
|
|||
|
|||
Perdón, no os he dicho que antes de reemplazar el fichero, debéis estar fiuera de Delphi.
Muchas gracias de nuevo. |
#3
|
||||
|
||||
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 |
#4
|
||||
|
||||
Pues acabo de hacer la prueba y funciona perfectamente.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
|||
|
|||
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. |
#6
|
||||
|
||||
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; |
#7
|
|||
|
|||
Perdona, pero no se como hacerlo. :-(
Puedes indicarme como, por favor. Muchas gracias. |
#8
|
||||
|
||||
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. // Saludos |
#9
|
|||
|
|||
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. |
|
|
|