![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#21
|
||||
|
||||
Oye Al, y las clases de terceros que has visto, ¿hacen lo mismo o algo similar? Porque buscando código en internet he visto algunos ejemplos que parece que se limitaron a copiar y pegar el código de Delphi, así que no sé hasta que punto realmente refuerzan la idea de que hay algo de cierto o sólo copian lo que vieron.
// Saludos |
#22
|
||||
|
||||
En efecto, Román, varias clases de terceros reproducen la misma leyenda, haciendo lo mismo con la cadena de la ruta de archivo. Dan toda la impresión de que simplemente se basaron en el código de la función de Delphi. Y claro, eso contribuye a "meter miedo". Cabe decir que no he encontrado algo que vaya en la misma dirección bajo código escrito en otros lenguajes.
Algo que certidumbre se obtiene al ver otros ejemplos en Delphi que se olvidan de la susodicha precaución, como esta clase de David Simpson con más de 1400 descargas desde la página de Embarcadero, creada en 1999 y actualizada hasta el año 2003: http://cc.embarcadero.com/Item/13836 Esta otra del proyecto JEDI, actualizada hasta el año 2009: http://upload.infosae.com.br/APLICAT...lFileUtils.pas Y hasta de los propios compañeros del club: http://www.clubdelphi.com/foros/show...232#post394232 En principio crearé mi clase sin esa desechada previsión (dejando sólo una breve nota alusiva al tema). Mientras tanto, veremos si hay oportunidad y tiempo de probar con versiones antiguas de Delphi y Windows, o de contactar a los creadores de las funciones GetFileVersionInfo (Microsoft) y GetComCtlVersion / GetFileVersion (Borland / Embarcadero). Cualquier dato para sumar al tema es bienvenido. Saludos. |
#23
|
||||
|
||||
Algo que no me queda claro es en qué afectaría que la rutina de la API escribiera sobre el argumento. No recuerdo cómo funciona el paso de parámetros de tipo string, o cómo afecta el modificador const. Porque si el parámetro pasa a la pila, como otros parámetros, no tendría porque haber problemas, aunque quizá fuera necesario no usar const, tal como, por cierto, hace el código de rastafarey.
// Saludos |
#24
|
||||
|
||||
Cita:
Respecto a la primera parte de tu duda, hice este ejemplo para ayudar a esclarecerla:
En pantalla aparecerán los resultados: Cita:
Para quienes inicien en el tema de los punteros-cadena, lo siguiente puede ayudar a entenderlo: -- Memoria RAM -- ... Byte 3400: 'F' Byte 3401: 'o' Byte 3402: 'r' Byte 3403: 'm' Byte 3404: '1' Byte 3405: #0 (fin de la cadena) ... Al comienzo Self.Name es igual a 'Form1', porque la propiedad Name del formulario es un puntero de valor 3400. Al procedimiento Modificar le termina llegando ese valor (3400) como parámetro puntero (PChar) y, en esa ubicación de memoria, cambia la 'F' por '¡', la 'o' por 'X', la 'r' por '!' y la 'm' por #0 (nuevo fin de la cadena). Espero haberme explicado. ![]() |
#25
|
||||
|
||||
Estas cosas se entienden muy bien si conoces el lenguaje ese que no te gusta, el C
![]() |
#26
|
||||
|
||||
Sí, claro. Gracias.
Por un momento pensé que si no se usaba const entonces el parámetro no pasaba como apuntador, pero ya veo que no es así. Por lo que se ve, esto va a ser más misterioso que el CopyObject ![]() // Saludos |
#27
|
||||
|
||||
Hablando de C, la API GetFileVersionInfo se muestra así en MSDN:
Código:
BOOL WINAPI GetFileVersionInfo(LPCTSTR lptstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData); De forma que tal y como se declara en este momento GetFileVersionInfo se puede usar sin necesidad de una variable de paso sin temor a que sea modificada. En mi opinión cualquier comentario encontrado en el código que ponga en duda la integridad del valor de la cadena de caracteres pasada como parámetro no hace otra cosa que intimidar y confundir al que posteriormente lo lea y muy posiblemente se encuentre versión tras versión como temor ancestral que nadie se atreve a combatir. ![]() Saludos. |
#28
|
||||
|
||||
Hola.
Yo tenía la misma idea que lo que menciona escafandra. Pero para quitarle cualquier resquicio a la duda, estuve haciendo unas pruebas e incluso con estas alteraciones del código no se registra cambio alguno:
Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#29
|
||||
|
||||
Gracias, escafandra, ecfisa. Creo que desafiaré a la leyenda...
![]() Casi, me gusta programar en C, pero como no soy conformista, busco algo que además de potencia posea elegancia y un toque de "humano", de ahí mi predilección por Pascal. ![]() Román, ¿creerás que esta gente de Embarcadero ha estado haciéndole cambios a la función _CopyObject? Aunque, según se mira en System.pas, sólo para adaptarla junto con muchas otras a 64 bits. Algún día sabremos cuál es (¿era?) su misterioso propósito. ![]() |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar como parametro la ruta de una imagen | richy08 | Impresión | 6 | 19-08-2008 22:56:00 |
llamar un archivo asi '192.168.1.1:\ruta\archivo.frf' | IVAND | Varios | 5 | 12-04-2008 16:18:54 |
Ruta absoluta de un archivo | Alexis De la Cr | PHP | 3 | 17-06-2006 23:41:22 |
ruta de un archivo | ddd_ddd | Varios | 1 | 07-06-2006 23:08:34 |
Ruta y nombre de archivo INI | jfranco | Varios | 2 | 27-02-2004 16:44:23 |
![]() |
|