PDA

Ver la Versión Completa : Problemas con String y BORLNDMM


nax
24-08-2005, 21:28:29
Qué tal, un saludo. Resulta que al leer n caracteres de un archivo de texto, y manipular estos n caracteres en un String, se dispara el error BORLNDMM.DLL, ¿alguien podría informarme por qué se genera un error cuando en mi código no existe? ¿cómo lo soluciono? De antemano gracias.

dec
25-08-2005, 03:47:10
Hola,

nax, ¿el error es el nombre de una DLL y ya está? ¿No te dice si lo que ocurre es que falta esa DLL? ¿Otra cosa quizás? Hasta aclarar esto, una búsqueda en Google (http://www.google.es/search?hl=es&q=BORLNDMM.DLL+error) con las palabras-clave "BORLNDMM.DLL error" ofrece algunos resultados que tal vez puedan indicarte una posible solución.

nax
25-08-2005, 23:26:39
Hola Dec, qué tal. El error que dispara es sobre un acceso no válido a una posición de memoria en el módulo BORLNDMM.DLL (Access violation at address 01193E6F in module 'BORLANDMM.DLL). Mi programa lo corro paso a paso, y de verdad que los datos que procesa existen (un String al cual le extrae caracteres hasta que encuentra un espacio en blanco, y como es una oración hay más de un espacio en blanco existente). Busqué en internet y lo que dicen es que ese error se dispara cuando se pasan argumentos String a funciones, que lo mejor es utilizar Char o ShortString. Sin embargo, en mi caso utilizaba funciones y finalmente opté por no utilizarlas, pero el error se me sigue disparando. Gracias!!!

jmariano
26-08-2005, 00:05:55
Sólo por ayudar un poco con lo que puede estar pasando, comentar que, según la ayuda de Delphi, el archivo BORLANDMM.DLL es un administrador de memoria que permite a los módulos (.dll) compartir memoria reservada dinámicamente. La ayuda dice que si una .dll exporta funciones que devuelven o reciben como parámetro una cadena "larga" (es decir, el tipo "string" de Delphi) o arrays dinámicos es necesario añadir a la cláusula "uses" de la .dll o de las aplicaciones cliente el unit "ShareMem" (al añadir esta unit se usará el administrador de memoria encontrado en BORLANDMM.DLL). (Esto también se cumple cuando se usan las funciones para reservar y liberar memoria: "GetMem", "FreeMem", etc.)

Así que fíjate si "ShareMem" se encuentra en la cláusula "uses" de tu aplicación o en tus .dll (esto último sólo en caso de que tus funciones las haya codificado en una .dll, donde tratas las cadenas). Si no es así, prueba a añadir el unit y, en caso contrario, prueba a quitarlo (al quitar el unit de la cláusula "uses", la aplicación, no debería usar BORLANDMM.DLL). (Está claro que si te da error en el archivo es porque algún módulo de tu aplicación tiene una referencia a "ShareMem", así que la prueba consistiría en eliminar dicha referencia o en añadirla en los units donde haciera falta, que sería en donde tratas las cadenas).

(Una última cosa que también puede estar pasando es que el archivo BORLANDMM.DLL esté corrupto, así que podrías probar a copiarlo de nuevo).

Lepe
26-08-2005, 12:31:26
Pues yo creo que es a causa de un fallo de programación. Si puedes postear la función, le echamos una visual. Creo que es mejor dar por bueno un código antes que empezar a mirar posibles bugs de delphi / windows / etc.

Delphi en sus rutinas más intrinsecas usa GetMem y FreeMem para reservar espacio para las cadenas, es lógico, sin memoria no puede almacenarse una cadena.

PD: Por favor, encierra el código entre

[ delphi ]
aqui vuestro codigo
[ /delphi ]

(sin espacios entre corchetes) Así consigues que respete el identado y aparezca las palabras reservadas en negrita y colores.


procedure Saludos();
begin
ShowMessage(' Un saludo y hasta luego');
end;