![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Gracias, Casi.
Y en XE2 tampoco varían las cosas, tiene el mismo comentario en el código. Pienso que el origen de esto pudo ser un defecto de alguna de las versiones de Windows contemporáneas de la primera versión de Delphi que tuvo esa particularidad. ¿Alguien que pueda probar sobre Windows 95, 98, Me, 2000? Hay algo que puede significar una pista: La modificación a la que alude el comentario podría tener que ver con la aparición de los "nombres largos" en las rutas de archivos. Ya saben, antes un nombre de archivo o directorio no podía tener más de 8 caracteres ni llevar espacios, ahora sí. No obstante, luego, en algunas ventanas de comandos, algunos de esos nombres largos aparecían con un nombre corto como "ARCHIVO~" porque Windows en realidad hacía una especie de chapuza guardando los nombres largos como nombres cortos (no sé si por el formato del disco, o algo así). Creo que quizá la función modificaba la ruta dada para convertir el nombre largo a su nombre corto "real", y así extraer del archivo el recurso que guarda los datos de versión. O bien, y relacionado con esto, para convertir el nombre por completo a mayúsculas. El hecho es que la modificación no podría (no debería) ser para crear una cadena más larga, sino una cadena o más corta o de la misma longitud, pues esa memoria le pertenece a la aplicación que llama a la función. De todas formas espero el mismo favor que ha hecho Casimiro (gracias por la molestia, Casi), de quienes tengan versiones de Delphi anteriores a la 5. ![]() |
|
#2
|
||||
|
||||
|
Hola,
Al ¿No tendrá que ver algo que acabo de leer en el MSDN?: Cita:
Saludos, |
|
#3
|
||||
|
||||
|
Cita:
Cita:
Román: Disculpa, había leído esa parte de tu cita, pero con las distracciones del día lo olvidé casi por completo. ![]() |
|
#4
|
||||
|
||||
|
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 |
|
#5
|
||||
|
||||
|
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. |
|
#6
|
||||
|
||||
|
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 |
|
#7
|
||||
|
||||
|
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. ![]() |
|
#8
|
||||
|
||||
|
Cita:
Cita:
![]() // Saludos |
![]() |
|
|
Temas Similares
|
||||
| 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 |
|