Navegación
Access violation in module rtl100.bpl en Win7 (C++Builder)
Por Darío el 06 de noviembre de 2011 en los siguientes foros: C++ Delphi
Temas relacionados
Respuestas
Gastón 0 puntos
Cuando salio Windows Vista, fue cuando fui abandonando la programación con C++Builder, asi que mi ayuda probablemente no te sea de mucha utilidad.
Sin embargo, probaste hacer enlace estático al generar tu ejecutable?
Además BDS 2006 es anterior a Windows 7, probablemente no tenga soporte y debas compilar en una versión más moderna.
De todas maneras, contamos si pudiste solucionar el problema.
Saludos.
Darío (iniciador del tema) 0 puntos
Si, lo solucioné agregando una llamada al siguiente procedimiento al final de cada for "pesado" o al final de cada procedimiento:
bool TfrmEscMas::liberarMemoria(void)
{
HANDLE HndlPpal;
bool ret=false;
try
{
HndlPpal = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
if ( SetProcessWorkingSetSize(HndlPpal, DWORD(-1),DWORD(-1)) )
ret = true;
else
ret = false;
}
__finally
{
CloseHandle(HndlPpal);
}
return ret;
}
El return sobra, por que si no se puede liberar la memoria "sobrante", no hay nada que se pueda hacer, uso el procedimiento sin evaluar el retorno y en XP y superiores anda perfecto, le tomé el tiempo y consume una cantidad considerable de ciclos del procesador, pero en el contexto en que lo uso, no afecta.
Con respecto al C++Builder, esa aplicación tiene varios años, no tengo ganas de pasarla al nuevo IDE, la sigo manteniendo en el viejo pero todavía poderoso 2006.
Ahora estoy usando el XE sobre 7 y mi fanatismo va en aumento, soy de la "vieja escuela" de C++ y VC se sale demasiado del estandard de C++, hice muchos intentos de adaptarme pero abandoné cuando sacó esa especie de referencia o no se como se llama ( ^ ) que nunca la entendí.
VC, para mi gusto, es más "sucio" que Borland (Embarcadero), no tengo líneas de código innecesarias en la pantalla que se presten a la confusión.
¿Por qué abandonaste el Builder? ¿Me contás tu experiencia?
Gracias pro las respuesta, saludos
Gastón 0 puntos
void TfrmMain::LiberarMemoria()
{
if( Win32Platform == VER_PLATFORM_WIN32_NT )
SetProcessWorkingSetSize(GetCurrentProcess(), 0xFFFFFFFF, 0xFFFFFFFF);
}Lo abandoné porque comencé a dedicarme al desarrollo web, además con el tiempo elegí linux como sistema de trabajo, y pocas veces iniciaba el windows, asi que fui dejandolo de lado.
Pero es verdad lo que decis, C++Builder es una solución elegante para un lenguaje complejo. Coincido con vos con respecto a VC.
Por cierto, voy a aprovechar para compartir una manera que descubrí en C++ Builder para mostrar formularios modales en una sola línea... una particularidad simplemente:
template <typename T>
class TShowModal
{
private:
T *p;
public:
TShowModal(TForm*Owner){
p = new T(Owner);
p->ShowModal();
}
~TShowModal(){
delete p;
}
};Y luego la usamos asi:
delete new TShowModal<TfrmAbout>(this);Interesante, no?
Espero que puedas aportar cosas de C++ Builder al club. Se nota que sabes lo que haces.
Saludos.
Darío (iniciador del tema) 0 puntos
Y más que saber, soy un ladrón profesional, desde que Internet estuvo al alcance público, fué mi fuente de conocimientos, todo lo que aplico en mi trabajo es robado de otros que encontraron la solución que estaba buscando.
Muy interesante la clase que propones, otra vez más voy a robar, le voy a hacer un par de modificaciones como crear un macro para la llamada y modificar la clase para que acepte parámetros. el 50% de las veces uso modales para requerir algún dato del usuario (logueo, config, rutas, etc) y sería mucho ahorro de escritura tener una clase o un tipo para no tener código redundante.
No me parece que sea este el hilo para postear algunos códigos, apenas tenga tiempo, postearé un procedimiento y una clase para utilizar un OCR ruso (Cognitive OpenOCR -ex Cuneiform OCR-) con C++Builder que estoy utilizando mucho en esta serie de desarrollos recientes.
Te mantendré al tanto.
¿Hay alguna forma de que te suscribas y/o suscribirme a tus post?
Saludos
Gastón 0 puntos
Saludos.
Tema cerrado por inactividad mayor a 90 días