Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (Shai)

vendredi 14 novembre 2003 à 15:11:43 | Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Shai

bonjour,

Je ne suis pas passé sur le Forum depuis longtemps, je développe en Windev 5.5 en ce moment et mon patron ne gueule dessus des qu'il voit qu'on est sur Internet (je cherche ailleurs sur Paris mais c'est pas la joie en ce moment)

Sur un projet (En delphi sous Windows 2000 Pro) en production depuis quelques mois on a eu le droit à un message "Erreur Windows 1400" qui fait planter TOUTES les Applications et massacrent nos Données (Index Out of Date que l'on arrive à récupérer mais avec 1 à 5% de pertes).

Actuellement on est sur Paradox (très très rapide pour petit volume mais très fragile) avant de changer de BD pour DB2 ou SQLServer on cherche a éliminé ce problème d'erreur 1400

L'erreur ne génère pas d'exception mais fait tout planter direct donc les threads qui calcule avec la BD Paradox en pseudo temps réel le dispatching des articles se plantent laissant des morceaux à moitié validé en DB


Stef Shai Han

vendredi 14 novembre 2003 à 17:31:20 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Delphiprog

Administrateur CodeS-SourceS
Erreur 1400 : ERROR_INVALID_WINDOW_HANDLE

A défaut de trouver l'origine du problème (pas évident), pourquoi ne travailles-tu pas en mode transactionnel ?
May Delphi be with you

vendredi 14 novembre 2003 à 17:52:32 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Shai


je ne connais pas très le transactionnel (Commit-RollBack) sur du Paradox ! je ne savais pas qu'il était capable de le gérer !

Comme je l'ai dit avant c'était du windev 5.5 (Beurk !) et on a eu qu'un seul petit mois pour TOUT refaire en DELPHI !
Donc j'ai eu trop le temps d'étudier ce genre de mécanisme !

Notre application est pseudo temps réel, elle communique avec une application d'interface avec une Trieuse de Vêtement et les temps de traitements DOIVENT être TRES COURT (1 messages toutes les 50 ms en moyenne pour le thread de pilotage plus d'autre thread d'importation et d'exportation de fichier en FTP vers un AS400)



J'ai réussi à reproduire le bug !

j'ai obtenu l'erreur 1400, lors de la fermeture du programme après qu'un thread est fait un appel à ShowMessage !

j'ai essayé ceci

FMessageForm := TForm.Create(Application); -> déclenche une Exception EOSError 1400 à la fermeture du Programme

FMessageForm := TForm.Create(nil); -> le programme se ferme normalement


Je n'ai ni ShowMessage, ni MessageDlg, ni Fenêtre, ni Etat dans mes Threads donc c'est une fontion (API, Composant TTable, TNMFTP, ...?) que j'utilise qui doit afficher un Message et qui fait tout planté, lorsque je n'aurais rien à faire sous Windev, je continuerais des recherches de mon côté ! Si quelqu'un s'interresse à se problème, qu'il n'hésite pas à m'aider !


Stef Shai Han

mercredi 19 novembre 2003 à 10:51:58 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Shai


j'ai trouvé dans le forum est topic nommé :
"Soit le Thread, soit l'UDP", je ne sais pas quelle est son groupe

les participants à ce sujet sont : Stailer et Bestiol

Je voudrais savoir si ils ont réussi à solutionné leur problème d'erreur 1400 !

Stef Shai Han

vendredi 5 décembre 2003 à 17:06:21 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

lio33

Bonjour.

j'ai le même type de problème avec une application Delphi.
Cette application utilise des threads dont certains exécutent des showmessage().

Problème : dans l'environnement Delphi l'appli tourne bien et je vois mes showmessage() auquels je réponds par OK et l'appli se termine sans problème.

En autonome, les showmessage() ne sont pas vus ( je ne peux donc pas répondre OK ) et l'appli se termine par un message d'erreur EOSErreur .. Erreur système 1400. handle de fenêtre non valide.

Je pense que cela est du au fait que je ne vois pas mon showmessage() et qu'il doit trainer quelque part en mémoire...
Mais je n'ai pas trouvé la solution. Si vous voyez quelque chose censé m'aider, merci d'avance.

lundi 8 décembre 2003 à 10:10:04 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Shai

Salut,

en fait lorsque tu fais un ShowMessage, Delphi crée une fenêtre avec comme parent

TForm.Create(Application);

donc le seul moyen que j'ai trouvé c'est de reprendre le source de ShowMessage (tu trouverais une fontion MessageDlgPosHelp dans laquelle il y aura CreateMessageDialog)

Ici ce pose DEUX solutions tu refais TOUTES Les fonctions entre ShowMessage et CreateMessageDialog (ce qui fait une demi-douzaine de fonctions), c'est par dur c'est du copier coller et tu modifie

Result := TMessageForm.CreateNew(Application);
en
Result := TMessageForm.CreateNew(nil); // ligne 1702 Dialogs

tu te retrouveras avec une unité du genre ThreadDialogs avec des fonctions ThreadShowMessage et ThreadCreateMessageDialog ...


AUTRE solution BEAUCOUP plus simple fais toi une fenêtre MessageForm sous le RAD de Delphi et utilise cette fenêtre pour tes showmessages !
et lorsque tu crérera ta fenêtre utilise le nil comme paramètre de Create

Moi dans mon problème, j'ai pas de fenêtre dans mes threads donc je sais pas d'où ça vient !






Stef Shai Han

jeudi 27 juillet 2006 à 14:12:45 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

DCA_BIGBOSS

J'ai aussi cette erreur 1400.

Merci à vous de m'avoir fait réaliser que ça pouvait être dù aux ShowMessage, c'était le cas pour moi.
J'utilise GLScene pour mon application, je vais donc remplacer mes ShowMessage par un TGLForm avec un bouton ;-)

Merci quand même pour tes deux solutions proposées ;-)

jeudi 27 juillet 2006 à 17:40:06 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Shai

Bonjour,

Je ne suis plus sur ce projet depuis un bout de temps, il fonctionne tout seul depuis trois ans, on a juste imposé un redémarrage de l'ordinateur toutes les 24h et les jours où ils n'ont l'on pas fait, ils ont du trimer pour remettre en stock tous les articles en cours de dispatch

2 causes possibles :
- la fenêtre pouvait être la TDBEngineErrorDlg, qui devait nous signaler d'un plantage du BDE (il n'aime pas on dirait bosser autant, environ 3 lectures, 3 modification, 1 insertion, 1 suppression en moyenne en l'espace de 50 ms, et cela en permanence pendant 8heures ... les plantages survenaient au bout de 3 jours sans rédémarrer, ce qui correspond à 3 * 8h ... lorsqu'ils sont passé à 2 équipes (2 fois 6h), ça ne tenait plus que 2 jours, ...

- l'erreur pouvait provenir de la fenêtre principal, les threads étaient mal développé en terme de gestion de la VCL, manipulation de Label, de progressBar, sans passer par un Synchronize, ... avec peu de chance, on tombe sur un cycle où windows dispatch ses messages au composant visuel au moment, où notre thread écrit dedans, et pouf erreur 1400 ...

Donc oui, à bannir les ShowMessage; pour le moment, j'ai réussi à créer des forms depuis un thread, mais ça bloque on dirait celle du thread zéro, pas top donc ...

Stef Shai Han


jeudi 27 juillet 2006 à 17:51:11 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Shai

En fait, j'ai retrouvé, un programme de test, voici le code

   TThreadMessage = class(TThread)
   private
      procedure PumpMessages();
   public
      procedure Execute(); override;
   end;

---

procedure TThreadMessage.Execute();
var
   ThreadForm: TForm;
   TrayRect: TRect;
   Delay, StartTime: Cardinal;
begin
     ThreadForm := TForm.Create(nil);
     try

        // Noms trouvés avec KillApplic.exe, et l'arborescence que j'ai développé en Juillet 2006
        GetWindowRect(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), TrayRect);

        ThreadForm.Height := 50;
        ThreadForm.Width := 400;
        ThreadForm.Top := (Screen.Height - ThreadForm.Height) - (TrayRect.Bottom - TrayRect.Top + 2);
        ThreadForm.Left := 0;

        ThreadForm.Parent := nil;
        ThreadForm.Show();

        while not Terminated do
        begin
           ThreadForm.Caption := FormatDateTime('dddd dd mmmm yyyy hh:nn:ss', Now());
           ThreadForm.Show();
           ThreadForm.Refresh();

           StartTime := GetTickCount();
           Delay := 0;
           while Delay < 1000 do
           begin
              Sleep(1);
              PumpMessages();
              Delay := GetTickCount() - StartTime;
           end;
        end;

        ThreadForm.Hide();

     finally
        ThreadForm.Free();
     end;

     FreeOnTerminate := True;
end;

// Cette fonction remplace l'Application ProcessMessages, et cela fait des miracles, on peut avoir sa fenêtre principal et plein de fenêtre indépendant qui se débrouille toute seule en Thread ...
procedure TThreadMessage.PumpMessages();
var
   Msg: TMsg;
begin
   while PeekMessage(Msg, 0, 0, 0, pm_Remove) do begin
         TranslateMessage(Msg);
         DispatchMessage(Msg);
   end;   
end;




Stef Shai Han


jeudi 27 juillet 2006 à 17:57:31 | Re : Erreur Windows EOSError 1400 : Error_Invalid_Window_Handle

Loda

Membre Club
J'ai eut cette erreur cette semaine ! C'était du a du code creant des fenetre depuis un thread. J'avais beau syncroniser la procedure, ma nouvelle form avait un composant avec un faux handle (cause de mon 1400). la seul "solution" que j'ai trouvé, c'est de ne pas créer cette form depuis un thread. pour le message, essaie de syncroniser les methodes qui appel des showmessage et autres avec le thread principal.


1 2

Cette discussion est classé dans : windows, erreur, error, eoserror, invalid


Répondre à ce message

Sujets en rapport avec ce message

Runtime error 217 [ par Jos ] Bonjour, Lorsque je tente d'inclure un composant treelist, dans mon application, j'ai des problèmes. En effet, par la suite, au application.termina ClientSocket Error [ par Kaiser ] Comment empecher le déclenchement d'une erreur par ex lorsque l'host du clientsocket n'existe pas...g essayé de mettre errorcode:=0; dans la procedure Erreur 'Socket Error 10060 Connection timed out.' [ par Tonton 78 ] Quelqu'un a-t-il déjà rencontré ce type d'erreur ?Elle est levée lors de l'envoie d'un e-mail par TIdSMTP et TIsMessage.Je ne trouve pas d'explication Listbox : richedit line insertion erreur ! [ par entity666 ] kikou tout le monde ^^ j'ai un petit probleme avec un listbox dans mon appli ... en fait voila :je developpe une application cliente caramail et dans AssignFile avec windows XP [ par bmwalid ] j'ai un problem avec la commande AssignFile dans winXPqd j'ai mis mon appli sur un CD j'intersepte l'erreur (file access denied) dans la command reset Recuperation message erreur [ par richarddum ] Salut, Je cherche à récuperer le message d'erreur SQL suite à une execution de requete La fenetre de deboggage me donne le message suivant : le pr Récupération Adresse IP du PC: Erreur Classe non enreistrée [ par chrisp2005 ] Help me!J'utilise Delphi 3!Je n'ai trouvé qu'un moyen de récupérer l'adresse IP du PC qu'utilise le logiciel que j'ai développé en Delphi 3 (je n'ai r EDBENGINE ERROR : erreur d'initialisation [ par louiwahl ] lors de l'execution d'une application dans un micro ordinateur ou delphi  n'est pas installé l'erreur suivante s'est produite: "exception EDBENGINE ER Error creating form : invalid binary value on line 9962 !! HELP !!!!!!!!!!!!!!!!!! [ par diwilbo ] Bon alors voila j'ai un gros soucis.... Impossible d'ouvrir mes fichiers principaux .pas et .dpr !!! A l'ouverture de cela, un message d'erreur s'af Erreur avec un exécutable sous windows 2000 [ par stevenleferran ] Bonjour,J'ai développé une application avec Delphi 7 Entreprise sous windows XP Home.Après l'avoir construit le projet. Puis l'exécuter sous windows 2


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.