BOGUE : Référencement des bibliothèques de types différents peut rendu dépendant de l'exécutable Platform

Traductions disponibles Traductions disponibles
Numéro d'article: 281913 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Symptômes

Après avoir compilé un projet Visual Basic qui fait référence à more than une bibliothèque de type sur une plate-forme (such as ordinateur Microsoft_Windows_2000-based), la sortie binaire ne peut pas s'exécuter sur d'autres plates-formes (telles que Microsoft Windows NT 4-, Microsoft Windows 95, Microsoft Windows 98- et Windows ME ordinateurs) et obtient une violation d'accès (AV).

Cause

Le compilateur Visual Basic respecte la casse lors de la lecture des entrées pour dllname dans des bibliothèques de types. Par conséquent, si un projet fait référence à deux ou plusieurs bibliothèques de types et l'entrée dllname pour la même DLL est orthographiée dans des casses différentes dans différentes bibliothèques, telles que dllname("kernel32.dll") dans la bibliothèque A et dllname("KERNEL32.DLL") dans la bibliothèque B, le compilateur génère deux sections d'importation pour la même DLL et restitue la plate-forme binaire dépendante.

Statut

Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés au début de cet article.

Plus d'informations

Procédure pour reproduire le problème

  1. Configurer un ordinateur Windows 2000 et un ordinateur Windows NT 4, tous deux avec les derniers service packs. Installez également Visual Basic et Visual C++ 6.0 avec Service Pack 5 sur les deux ordinateurs.
  2. Sur l'ordinateur Windows 2000, copie et collage l'IDL (Interface Description Language) suivantes du code dans le bloc-notes et enregistrez-le en tant que lcase.idl. Compiler avec MIDL.EXE, lcase.idl midl. La bibliothèque de type qui en résulte est nommé lcase.tlb.
    [
      uuid(D618AA4D-814A-47a2-9AC1-DDE18EDF1C54),
      version(1.0),
      helpstring("Lower case test")
    ]
    library lcasetest
    {
        [
          dllname("kernel32.dll"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - lcase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  3. As in étape 1, générer ucase.tlb par le code IDL suivant :
    [
      uuid(3F215C63-D0AD-4980-93F2-5DDF850061E4),
      version(1.0),
      helpstring("Upper case test")
    ]
    library ucasetest
    {
        [
          dllname("KERNEL32.DLL"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - ucase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  4. Créez un projet EXE Standard Visual Basic. Form1 est créé par défaut.
  5. Dans le menu projet, cliquez sur références pour les sélectionner. Dans la boîte de dialogue références, accédez à lcase.tlb et ucase.tlb, sélectionnez les deux bibliothèques et puis cliquez sur OK.
  6. Ajoutez le code suivant à Form1 :
    Private Sub Form_Load()
        lcasetest.Sleep 1
        ucasetest.Sleep 1
    End Sub
    					
  7. Dans le menu fichier, cliquez ici pour Enregistrer le projet et puis sélectionnez Rendre Project1.exe pour compiler le projet.
  8. Lancez l'exécutable, Project1.exe et notez que le formulaire s'affiche sans erreurs.
  9. Copie Project1.exe vers l'ordinateur Windows NT 4 et l'exécuter. Notez qu'une violation d'accès se produit.
  10. Copier et compilez le même projet sur l'ordinateur Windows NT 4 et exécutez à la fois les Windows NT 4 et Windows 2000-sur des ordinateurs. Notez qu'il échoue sur l'ordinateur Windows 2000.

Propriétés

Numéro d'article: 281913 - Dernière mise à jour: lundi 24 février 2014 - Version: 3.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 4.0 Édition Entreprise
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 6.0 Édition initiation
Mots-clés : 
kbnosurvey kbarchive kbmt kbbug kbcompiler kbnofix KB281913 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 281913
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com