FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
excepciones con raise at
Buenas, gente.
Ayer estaba revisando la gramática de Pascal que viene en Delphi 7, y me encontré con una regla que decía NoMeAcuerdo -> RAISE [Object] AT [Address] Que ahora que me fijo no está en Delphi 5... Y me agarró la inquietud, ¿Alguien sabe qué se hace con ese "AT"? Porque lo de "raise" lo conozco, pero el AT, ni idea, y no encunetro nada en la red... Gracias miles. Última edición por Lord Delfos fecha: 12-08-2008 a las 15:04:57. |
#2
|
||||
|
||||
¡Hola!
Hasta hoy me entero de la palabra reservada At. Es interesante lo que dice la ayuda al respecto: Cita:
Todavía no lo tengo claro del todo, pero, al buscar la expresión regular "Raise .* At " en la carpeta C:\Archivos de programa\Borland\Delphi7\Source, encontré que Borland lo utilizó en varias ocasiones. Al ver el código fuente del famoso procedimiento Abort en la unidad SysUtils: Se observa que la excepción es elevada en la dirección de memoria devuelta por la función anidada ReturnAddr. Esta función le asigna al registro de la CPU EAX el valor que se encuentra en la dirección de memoria EBP + 4. Y ese es el valor que devuelve, ya que normalmente una función regresa el valor que se encuentra en el registro EAX. Ahora sólo habría que investigar qué suele guardar el registro de CPU EBP en Delphi para tener una idea más precisa de qué dirección en concreto se está usando para elevar la excepción. Mientras tanto infiero que al ejecutar el procedimiento Abort de esta manera: la excepción se elevará en la dirección de memoria donde hemos hecho la llamada a Abort y no donde Abort ejecuta la instrucción Raise. Lo cual, para fines de depuración es muy conveniente, ya que el depurador nos dirá que se elevó una excepción formalmente dentro de MiRutina y no dentro del procedimiento Abort. Abort es un procedimiento utilitario para simplificar la elevación de una excepción silenciosa, pero la manera en que hace dicha elevación (con At), ayuda a que suceda como si en lugar de Abort hubiésemos escrito nosotros mismos una instrucción Raise, según parece. Encontré este interesante artículo relacionado con el tema: http://www.latiumsoftware.com/es/pascal/0014.php Y este par de referencias adicionales que hablan del registro EBP: http://akimpech.izt.uam.mx/Web_jr/ami05/convC.pdf http://www.hackemate.com.ar/ezines/d...nts004/0X1.txt Espero haber ayudado. Al. Última edición por Al González fecha: 12-08-2008 a las 16:38:30. |
#3
|
||||
|
||||
¡Ajá! Tu búsqueda fue mucho más frutífera que la mía...
Habrá que investigar el asunto. Graciocles, Al. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Para qué usar raise Exception | wascar2003 | Varios | 3 | 20-11-2007 12:50:15 |
Excepciones | adpa | OOP | 5 | 14-12-2005 15:45:45 |
Excepciones | Acker | Tablas planas | 6 | 06-08-2005 15:22:18 |
excepciones!!!!! | hanna33 | OOP | 3 | 24-05-2005 17:10:10 |
Excepciones del bde | Pablo Carlos | Conexión con bases de datos | 3 | 15-04-2005 17:57:46 |
|