cs_Linkuff
Messages postés24Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention12 janvier 2005
-
11 janv. 2005 à 19:35
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 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 ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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]
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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.
cs_Linkuff
Messages postés24Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention12 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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Linkuff
Messages postés24Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention12 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 :(
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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]
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
"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]
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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.
cs_Linkuff
Messages postés24Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention12 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 ?
cs_Linkuff
Messages postés24Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention12 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 ?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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")
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 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.