FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problemas con String y BORLNDMM
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.
|
#2
|
||||
|
||||
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 con las palabras-clave "BORLNDMM.DLL error" ofrece algunos resultados que tal vez puedan indicarte una posible solución. |
#3
|
|||
|
|||
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!!!
|
#4
|
||||
|
||||
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). Última edición por jmariano fecha: 26-08-2005 a las 00:24:45. |
#5
|
||||
|
||||
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.
|
|
|
|