JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 mai 2023
-
4 janv. 2021 à 04:55
JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 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...)
JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 mai 20237 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.
JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 mai 20237 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.
JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 mai 20237 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.
JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 mai 20237 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.