Puede hacerlo con MadCodeHook. Use la función HookCode
, asígnele la dirección de la función que desea reemplazar y la dirección de la función a la que desea llamar. Le devolverá un puntero de función que puede usar para llamar al original y para desengancharlo después. En esencia, implementa los tres pasos intermedios de la descripción de Barry.
Creo que MadCodeHook es gratis para uso personal. Si buscas algo más libre que eso, puedes intentar encontrar an old version of the Tnt Unicode controls.Usó la misma técnica de enganche para inyectar soporte Unicode en algunos de los códigos de VCL. Necesitarás una versión anterior porque las versiones más recientes ya no son gratuitas. Busque la función OverwriteProcedure
en TntSystem.pas, que es también donde encontrará ejemplos de cómo usarla.
El enganche de código es bueno porque no requiere la recompilación de RTL y VCL, y no implica la compilación condicional para controlar qué funciones están dentro del alcance. Puede enganchar el código de su procedimiento de configuración de prueba de unidad, y el código original nunca notará la diferencia. Pensará que está llamando a la función original FileExists
(porque lo es), pero cuando llegue allí, saltará de inmediato a su versión burlada.
"o modifica la declaración de usos para referirse condicionalmente a una unidad diferente." - me parece que esto debe ser lo más fácil para esto. Asegúrate de que tu unidad especial sea la última, y luego puedes redefinir cualquier función. – mj2008
Supone que la fuente de la unidad está disponible. Si es así, entonces es obvio; sin embargo, el que pregunta preguntó específicamente sobre el tiempo de ejecución. –
Me gusta la ironía :) Pero tienes toda la razón. +1 – guerda