PDA

Ver la Versión Completa : A call to an OS function failed ...


Xavierator
20-05-2004, 12:54:51
Hola, me encuentro con algun cliente (no todos), que al ejecutar la aplicacion, le aparece el error:

"Error reading NombreDeUnComboBox.Items.Strings: A call to an OS function failed."

¿ Alguien sabe a que se puede deber o en todo caso que se puede hacer en el programa para intentar averiguar mas al respecto ?

Gracias, Xavierator.

marto
20-05-2004, 13:31:12
Wop!

Pues nunca he visto ese mensaje, pero con los datos que das, yo creo que tiene que haber algo "roto" en los ordenadores. El error se produce al llamar a una rutina de SO y dices que solamente pasa en algunos ordenadore y encima se produce al leer la propiedad Strings de TComboBox... todo eso me hace pensar que algo está mal instalado...

Xavierator
20-05-2004, 15:10:51
Hola, yo tampoco habia visto el mensaje hasta ayer, pero por lo que he podido encontrar buscando el texto del mensaje a traves del google, la teoria mas aceptable, es que parece un problema de recursos de los pc's, ya que el error parece dar al crear un formulario con muchos controles de tipo tlistbox y tcombobox.

http://groups.google.es/groups?q=A+call+to+an+OS+function+failed&hl=ca&lr=&ie=UTF-8&selm=3d1233ec%241_2%40dnews&rnum=1

http://groups.google.es/groups?hl=ca&lr=&ie=UTF-8&threadm=3c03c29c_2%40dnews&rnum=6&prev=/groups%3Fq%3DA%2Bcall%2Bto%2Ban%2BOS%2Bfunction%2Bfailed%26hl%3Dca%26lr%3D%26ie%3DUTF-8%26selm%3D3c03c29c_2%2540dnews%26rnum%3D6

Si el problema son demasiados controles en un mismo form, pues tiene solucion cambiando controles a otros forms, pero si el problema es el numero general de controles, cambiarlos de sitio no resolvera el tema.

Sabiendo esto, ¿ se os ocurre alguna solucion ?

¿ Hay alguna manera (control, api, ...) de controlar los recursos dentro de un programa en Delphi ?

Lo que en ningun queda muy claro, es si los recursos, estan ligados unicamente al sistema operativo y como los organiza o si la cantidad de memoria ram tiene algo que ver.

Saludos y gracias, Xavierator.

delphi.com.ar
20-05-2004, 15:57:22
Simplemente los Items de un TString se cargan por streaming, este flujo de datos suele estar basado en funciones del SO. Evidentemente falla por algún motivo, es una lástima que no sea mas específico, pero los motivos pueden ser variados, desde errores de disco hasta problemas de privilegios.
El error aparenta producirlo el TReader que es el que lee el stream del "DFM" que queda itegrado en el EXE, no descarto que desde el código estes cargando los items mediante un LoadFormFile / LoadFromStream.

Saludos!

Xavierator
20-05-2004, 16:32:35
Hola, no es que este resuelto, pero ya tengo el problema localizado, os cuento:

efectivamente es un problema de recursos, ya que para poder reproducirlo en un pc con un win98, simplemente he ejecutado el programa dos veces para obtener el mismo tipo de error. Lo que es mas extraño es que me digan que tambien pasa en windows xp, ya que un pc con win xp, he ejecutado el programa hasta 6 veces (ya me he cansado de ejecutarlo mas veces) para ver que ni asi falla.

Y ya he comprobado que la memoria, no afecta a los recursos disponibles ni en un win98 ni en win XP.

Saludos, Xavierator.

jgutti
02-08-2004, 16:41:54
Hola al foro.

Xavierator, Como solucionaste este error para "A call to an OS function failed" para windows 98

guillotmarc
02-08-2004, 17:05:23
Hola.

Yo también tengo este error en una rutina concreta. Siempre que se ejecuta sobre Windows 98 da ese error, y en Windows superiores funciona correctamente. Esa rutina no hace nada raro : ejecuta unos procedimientos almacenados, cierra una conexión de datos, y descarga un formulario.

No lo relacioné con los recursos de Windows, porqué en Windows 98 ocurre siempre (independientemente de si hay muchos programas cargados, o ningún otro).

Aún no lo he depurado porqué no tengo ningún Windows 98 con Delphi instalado.

Saludos.

marto
02-08-2004, 17:29:43
Mirando por ahí (http://www.delphipages.com/threads/thread.cfm?ID=95744&G=95741) he encontrado que el tema puede estar relacionado con un exceso de "windowed controls" (¿Como trduzco eso?). También comentan que tiene que ver con un límite lógico, con de memoria, por eso en versiones 2k/xp es más difícil que pase.
¿Puede ser que vayan por ahí los tiros?

Xavierator
03-08-2004, 08:24:10
Hola, hace tiempo que no me pasaba por el foro y acabo de ver que el hilo ha ido creciendo.

Pues bien, el problema sigue sin solucionarse, ya que aunque yo lo pueda reproducir en un Win98 simplemente ejecutando dos veces el mismo programa, ya sea al leer, crear, ... algun componente, ¿ que solucion se le puede dar a esto ?, bien habra que leerlo, crearlo, ..., por lo que no vale poner algun control de que si no puede crearlo por ejemplo, no lo haga y ya esta, ya que el programa con mensaje de error o sin, seguira sin funcionar, por lo que no se que solucion hay que darle a este tema. Teniendo en cuenta que alli donde se produce, no lo arrancan dos veces y supongo que se debera a otros programas cargados en memoria que hacen que simplemente ejecutando uno solo de los mios ya de el error, si pudiera, me gustaria ver el administrador de procesos o de recursos de windows para ver como va el PC antes y mientras se arranca mi programa, pero esto no puede ser, si alguien tienen alguna idea mejor, pues adelante...

Intente buscar alguna herramienta que permitiera saber si hay suficientes recursos o no para intentar controlar algo, pero simplemente como control para que el mensaje de la aplicacion sea entendible no como el de ahora ni como solucion, y encontre en la Delphi Super Page las herramientas MSIC.zip (MiTeC System Information), pero no las he puesto en practica a exceppcion del ejecutable demo para que la informacion que da.

Saludos, Xaviaretor.

marto
03-08-2004, 09:10:47
Wop!

¿Tienes muchos forms como autocreate? Si los forms tienen muchos controles, es posible que, al tenerlos todos creados aunque invisibles, excedas el límite de win98.

Xavierator
03-08-2004, 09:39:38
El problema, en mi caso, no son muchos forms, sino todo lo contrario, unicamente que hay uno de los pocos que tengo, que por necesidad, tiene muchisimos TComboBox, por lo que supongo que si Windows no tiene suficientes recursos, pues no puede crear todos los componentes, pero cuando esto pasa en poquisimos casos, quiere decir que no es tanto el programa en si mismo, sino alguna caracteristica o condicion de windows o los programas que hay en ese momento.

Saludos, Xavierator.

marto
03-08-2004, 11:45:03
quiere decir que no es tanto el programa en si mismo, sino alguna caracteristica o condicion de windows o los programas que hay en ese momento.


En eso estamos totalmente de acuerdo. De todas maneras, si excedes el límite de la máquina o, en este caso del sistema operativo... no veo más solución que cambiarlo, o eso, o te las apañas para "descargar" el form de tanto combo!