Erreur 91... au premier chargement d'une appli.

Résolu
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - 4 janv. 2021 à 04:55
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - 8 déc. 2021 à 01:19
Salut à tous,
J'ai une question portant sur le comportement d'un fichier exécutable en VB6, lors de son chargement.
En effet, si j'allume mon micro, que je charge mon projet Vb de 4,4M...

J'ai une erreur 91:

:

Par contre, si je l'ouvre de nouveau... pas de problème !
Je mets ça sur le compte d'une latence de l'anti-virus qui scan l'exécutable en première exécution, puis il mémorise le scan pour la deuxième... mais, ce bug est très déroutant pour les utilisateurs non informés...

Avez-vous déjà vu cela, sur des applis anciennes ou récentes avec l'utilisation d'Avast ?

(Je vais faire le test en désactivant l'anti-virus...)

4 réponses

JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
4 janv. 2021 à 05:20
Salut, me voici de retour...

J'ai repris un test à froid en redémarrant ma machine.
J'ai désactivé Avast, et lancé mon appli.

Tout fonctionne au premier démarrage.

J'en conclue d'après ce test, que l'Anti-virus bloque les OCX lors de leurs chargement pour les scanner, puis après validation laisse l'exécutable charger les OCX sans latences ni opposition d'utilisation.

Du coup, le problème devient plus embêtant, car si les librairies ne sont pas exécutées au moins une fois, l'anti-virus ne les aura pas testé et va les exclure à chaque démarrage à froid.

Même avec une boucle de ralentissement, les OCX devront être chargées ! Et la solution de faire un "Loader" avec les OCXs sans les utiliser ne me réjouit gère.

C'est ballot...

Si vous avez une idée, sans désactiver l'anti-virus... faites le moi savoir pas le biais de ce fil... ce serai sympa.

Merci pour vos futurs conseils.
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 4 janv. 2021 à 06:09
Bonjour... encore.

Bon, c'est en ce penchant sur le problème que l'on a le plus de chance de trouver.

Bon, à priori, la résolution est simple, mais très utile pour les fichiers exécutables de grosse capacité.

Je conseille aussi de l'effectuer préventivement pour vos réalisations.

Ne lancez pas vos applications directement sur un Form, mais sur la Sub Main() en module basic.

placer:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Main() 

' Laisser l'Anti-virus faire ses trucs.
Sleep (500)

' Lancement de votre fenêtre d'accueil et effectue un Form_Load
FrmMainWnd.Show

End sub


Le Sleep bloque l'exécution du programme et donc le chargement de la fenêtre, et cela semble suffire à l'anti-virus pour scanner les 4 méga du programme et les OCXs au premier chargement.
Cette fonction a l'avantage de figer complètement le tread d'exécution au niveau système... même le chargement des fichiers de dépendance.

500 semble fonctionner sur une machine rapide.

J'espère que cela vous sera utile...

Bon codage à tous.

Amusez-vous bien.
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
13 févr. 2021 à 10:55
Salut à tous,
Je reviens sur ce problème de chargement d'objet pour aider les personnes qui ont eu ce problème.

Donc, dans mon cas, je charge un projet sur le module principal avec ce chargement d'objet:

Public MonImage as PictureBox

Sub Main()
' Les configs, les déclarations...
' Et je charge la fenêtre principale.
FrmMain.show 
EndSub


Là, si le projet est important, une erreur "91" est présente sur "MonImage" qui est pourtant bien paramétré.

Le problème a été résolu en préchargeant la form principale :

Sub Main()
FrmMain.hide
' J'ai mis un petit "Splash Screen" vide pour donner 
' le temps la la fenêtre de se charger...
FrmSplash.show
Sleep (500)
FrmSplash.unload

' Les configs, les déclarations...

' Et je charge la fenêtre principale.
FrmMain.show 
EndSub


Je ne peux expliquer ce phénomène de latence sur cet objet déclaré en "Public", qui à fonctionné de nombreuses fois, et à force d'ajouts successifs... refuse de prendre en compte la déclaration publique lors de son utilisation sur la Form principale.

Voilà,
J'espère que cela va résoudre quelques problèmes que les utilisateurs contemporains rencontreront sur les Visual-Basic, de moins en moins adaptés aux configurations hightech... même si la compatibilité est toujours au rendez-vous.

Amusez-vous bien...
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 1 févr. 2022 à 03:20
Salut,

J'aimerai ajouter que pendant le débogage, la fonction était en "Global" et non "Public".

"Global" a un effet pervers qui rend la compilation de codes "fonctionnelle" sur l'ensemble du projet (modules et forms) ... mais, au bout d'un moment, l'erreur arrive.

Donc, "Global" est une déclaration locale pour les modules ".Bas" et non pour la gestion du projet en sa totalité.
"Global" est peut-être une fonction héritée du QBasic ou GwBasic qu'il faut proscrire à tout prix du Visual Basic.
Sous peine de se retrouver avec des erreurs de déclaration au fil des compilations.

L'erreur est maintenant un mauvais souvenir.
0
Rejoignez-nous