On Error Goto avant un Form_Load ?

cs_Linkuff Messages postés 24 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 12 janvier 2005 - 11 janv. 2005 à 19:35
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 24 janv. 2005 à 18:56
Salut à tous !

J'ai programmé un logiciel dont l'une des form (en l'occurence la premiere form chargée) utilise un form transparent disponible avec "Microsoft Form 2.0 Object Library". Comme certains on pu le remarquer, ce composant provoque sur certains PC l'erreur suivante :

"Erreur système & H8007007E (-2147024770) Le module spécifié est introuvale"

Afin de palier à ce problème j'ai donc pensé à l'astuce suivante :

Private Sub Form_Load()
On Error Goto ProchaineForm

[code...]
Exit Sub

ProchaineForm:
Identification.Show 'Idenfication étant la prochaine form à ouvrir et n'utilisant pas Form 2.0
Unload Me
End Sub

Malheureusement, le plantage apparait quand même et cela (je pense) dû au fait que c'est dès le chargement que l'application plante. Il faudrait donc pouvoir arriver à faire un On Error Goto avant le Form_Load et dès le chargement de l'application... mais comment ?

18 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
11 janv. 2005 à 20:08
Depuis le temps que je le dis : le composant Microsoft Forms 2 est
livré avec Office, et vous n'avez pas le droit de le déployer avec
votre application => si vous voulez faire des programmes portables,
il faut soit être sûr que vos utilisateurs ont office d'installé (ce
qui est loin d'être certains), soit ne pas l'utiliser !



Note : ton astuce ne peux pas marcher : le Form_Load est déclenché au
chargement de la feuille, soit, mais tant que ton contrôle est intégré
lors de la création, tu ne pourras pas empêcher l'erreur !

DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
11 janv. 2005 à 20:10
Salut

"Microsoft Forms 2.0 Object Library" repose sur la DLL "FM20.DLL" qui est installée avec EXCEL (ou l'OFFICE) dans le dossier c:\windows\system ou c:\windows\system32 donc, il est normal que ton appli ne fonctionne pas sur des postes où il n'y a pas l'office microsoft d'installé.

1ère solution, créer un pack d'install incluant cette DLL et faire une install sur tes postes.
2ème solution, copier manuellement la DLL puis sans doute l'enregistrer avec regsvr32.

Sinon, puisque cette DLL fait partie des dépendances de ton EXE, ça plantera toujours si elle n'est pas présente.

Cordialement, CanisLupus
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
11 janv. 2005 à 20:12
Trop tard

DARKSIDIOUS, j'avais oublié le côté droit d'utilisation.

Cordialement, CanisLupus
0
cs_Linkuff Messages postés 24 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 12 janvier 2005
11 janv. 2005 à 20:22
Pourtant j'ai bien mis Register et copie du fichier FM20.dll dans mon installation... je vais revérifier. Toujours pour la même application, il arrive que sur les machines ayant windows 98, une erreur "erreur système 50003" apparaisse. J'ai trouvé d'où ça venait et cette erreur est provoqué par l'icone de la form. Il suffit donc de mettre la propriété Icon de la form à vide pour que ça marche. Malheuresuement, une icone en forme de fenetre bleu, ça fait pas très pro pour une application :(

J'ai donc pensé à cela :

Private Sub Form_Load()
On Error GoTo ERREUR50003

...

Exit Sub

ERREUR50003:
Me.Icon = Empty
Me.Refresh
End Sub

Cela peut t'il fonctionner ? Il y a t'il une autre solution plutot que de proposer un patch correctif pour ceux qui aurait l'erreur ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Linkuff Messages postés 24 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 12 janvier 2005
11 janv. 2005 à 20:25
Et juste pour précision, même en vérifiant que le fichier FM20.DLL est bien présent et même après un Regsrv32 c:\windows\system32\fm20.dll, l'erreur apparait toujours sur mon deuxième ordi :(
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 janv. 2005 à 20:36
CanisLupus, il faut aussi préciser que FM20.dll à elle même une dépendance qui n'est pas détectée automatiquement (du moins avec l'assistant d'empaquetage de vb) il s'agit de FM20FR.dll pour un système français. Il faut donc l'inclure manuellement dans le pack sinon ça marche pas.

J'étais pas au courant pour les problèmes de droit, il me semblais l'avoir trouver sur les cd's de la version entreprise de vs6, je dois surrement confondre.

Sinon, Linkuff, si ce n'est pas un problème d'install de la dll, as-tu essayer de démarrer sur un Sub Main au lieu de démarrer sur ta feuille et de gérer ton On Error dans le main?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
11 janv. 2005 à 20:39
Je pense que ca vient des droits, comme je l'ai dit : vous N'AVEZ PAS
LE DROIT de déployer cette dll avec vos projets, donc c'est logique
qu'un simple register de la dll ne fonctionne pas !



Je le dis, et redis : N'UTILISEZ PAS ce composant si vous voulez que
votre programme marche partout, c'est pas compliqué ! J'ai eu ce
problème avec mon viewer d'API, et je peux te dire que j'ai retenu la
leçon : quand une bonne partie de ton prog se base sur quelques
contrôles d'une librairie dont tu n'as pas les droits de déploiements,
tu ne fais plus l'erreur deux fois !

DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
11 janv. 2005 à 20:49
Exact casy, d'ailleurs, le mieux est, comme je l'ai déjà dit dans d'autres posts, d'utiliser Depends.exe (à télécharger gratos sur
http://www.dependencywalker.com/) pour connaître les dépendances d'un exe et vérifier si elles sont présentes sur le poste ou on veut installer l'exe. Ca évite de galérer.

Pour le problème de droits, finalement, je ne sais pas puisqu'on peut télécharger gratuitement cette dll sur +sieurs sites connus. Si DARKSIDIOUS pouvait donner des précisions, ça m'intéresserait aussi.

Cordialement, CanisLupus
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
11 janv. 2005 à 20:54
OK DARKSIDIOUS, d'ailleurs, je n'utilise pas ce composant mais j'aurais aimé avoir une adresse de site ou un texte officiel décrivant les droits d'utilisation de cette DLL.

Cordialement, CanisLupus
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 janv. 2005 à 21:09
Oui CanisLupus, Depends est un utilitaire intéressant livré d'ailleurs
de base avec VS (sur le site c'est une version + récente) mais même lui
ne détecte pas la dépendence Fm20fra pour la dll fm20.dll, il ne doit
pas s'agir surement d'une dll mais plutot d'un fichier ressource pour
régionaliser la dll je pense, mais bon ça change pas grand chose.



Mais Dark a raison, il vaut mieux dans la mesure du possible se passer
de cette DLL, à moins d'aimer se prendre la tete sur des bugs pas
toujours très compréhensible.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
11 janv. 2005 à 21:17
http://support.microsoft.com/kb/224305/EN-US/



C'est clair, net et sans bavure :



"The Fm20.dll is NOT redistributable. You must have an
application such as Microsoft Office 97 on the target system that
installs Fm20.dll as part of its setup. (Fm20.dll is included with the
OSR2 and OSR2.5 releases of Windows 95.) You can also find this file on
the Visual Basic 5.0 CD under the \TOOLS\DataTool\Datatool\Msdesign
folder. This will be installed only if you run the setup for the Visual
Database Tools. In any case, you may not distribute the Fm20.dll as
part of your setup, even if you purchase the Microsoft Office Developer
Edition product.
"




En gros, cela veut dire : il faut soit Office 97 (ou supérieur) soit VB
5 (ou supérieur) d'installer sur la machine cliente, sinon, vous n'avez
pas le droit de distribuer Fm20.dll, à part si vous acheter la version
développeur de Microsoft Office !



Donc : n'utilisez pas les Microsoft Forms 2 !!! C'est un conseil que je donne à tout le monde, sauf ceux qui ont le droit de la distribuer bien sûr !

DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 janv. 2005 à 21:22
Merci Dark
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
11 janv. 2005 à 21:48
Merci DARKSIDIOUS pour cette précision.
Je ne manquerai pas de faire référence à ton post chaque fois que je verrai des questions sur l'utilisation des contrôles de Form 2.0 notamment les fameuses listbox à +sieurs colonnes en VB alors qu'il existe les listview.

Cordialement, CanisLupus
0
cs_Linkuff Messages postés 24 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 12 janvier 2005
11 janv. 2005 à 21:57
Merci beaucoup pour toutes les précisions ;) Je corrige immédiatement le pb ! Et quelqu'un a une idée pour la question posté en 5ème position de ce topic ?
0
cs_Linkuff Messages postés 24 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 12 janvier 2005
12 janv. 2005 à 09:03
Toujours pour la même application, il arrive que sur les machines ayant windows 98, une erreur "erreur système 50003" apparaisse. J'ai trouvé d'où ça venait et cette erreur est provoqué par l'icone de la form. Il suffit donc de mettre la propriété Icon de la form à vide pour que ça marche. Malheuresuement, une icone en forme de fenetre bleu, ça fait pas très pro pour une application :(

J'ai donc pensé à cela :

Private Sub Form_Load()
On Error GoTo ERREUR50003

...

Exit Sub

ERREUR50003:
Me.Icon = Empty
Me.Refresh
End Sub

Cela peut t'il fonctionner ? Il y a t'il une autre solution plutot que de proposer un patch correctif pour ceux qui aurait l'erreur ?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
12 janv. 2005 à 20:05
Salut

Pour ta 1ère question, tant que tu auras le composant "Microsoft Forms 2.0 Object Library" dans ton prog, pas de gestion d'erreur possible pour ceux qui n'ont pas Office ou VB d'installé. Le mieux est que tu revoies ton prog et que tu utilises ListView à la place des listbox à +sieurs colonnes. Ca, au moins tu auras le droit de le redistribuer.

Pour l'icone, une solution possible en VB6 :

Me.Icon = LoadPicture() ' charge une icone vide (enfin l'icone par défaut)

mais tu peux fournir l'icone dans le dossier de ton exe et faire :
Me.Icon = LoadPicture(app.path & "\mon_icon.ico")

Cordialement, CanisLupus
0
Sk8cravis Messages postés 8 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 21 septembre 2007
24 janv. 2005 à 17:47
Bonjours, je cherchais des infos sur cette librairie et que vois-je ?
Pas le droit de distribuer

Donc j'aimerais savoir comment on obtiens ces fameuses Listview dont vous parler ?
Quelle Librairie doit on inclure ?

Merci d'avance

+==--
| @+
| Sk8Cravis
+======------
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
24 janv. 2005 à 18:56
Les ListView ne font pas partie de la librairie "Microsoft Forms 2.0 Object Library" mais dans "Microsoft Windows Common Controls 6.0 (SP6)" reposant sur l'ocx "mscomctl.ocx" et ça tu peux distribuer si tu as une license VB.

Cordialement, CanisLupus
0