PRB : Conflit avec EOF lors de l'utilisation de # import avec ADO

Traductions disponibles Traductions disponibles
Numéro d'article: 166112 - 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

Avec # import, il est possible de générer des classes qui encapsulent la bibliothèque de types de base de données API, telles que ActiveX Data Objects (ADO), au sein d'une application windows. Par exemple :
   // Excerpt from Stdafx.h
   #include <afxwin.h>           // MFC core and standard components.
   ...
   #import <msado15.dll>        //for ADO 1.0, import "msado10.dll"
 
				
lors de cette manière, il se peut que vous receviez les erreurs suivantes de l'instruction # import pour ADO sur la propriété Recordset.EOF :
erreur C2629 : inattendu ' short ('
erreur C2238 : jetons inattendus avant ';'
L'outil DLL Universal Problem Solver (DUPS.exe) est un exemple qui contient tous les utilitaires documentés dans janvier 2000 News de MSDN (Microsoft Developer Network) d'article "End de l'enfer des DLL." Veuillez consulter ce MSDN article avant de lire cet article.

Le package DUPS est un ensemble d'utilitaires que vous pouvez utiliser pour effectuer le suivi et de comparer les versions DLL sur plusieurs ordinateurs Windows. Le nombre maximal est régi par votre installation SQL Server ou Microsoft Access. Le client Dlister qui énumère les DLL sur un système s'exécute sur Windows 95 ou Windows 98, Windows NT 4.0 et Windows 2000. Les utilitaires d'affichage ont été développés sur Windows NT 4.0 et Windows 2000 et nécessitent Microsoft Access ou Microsoft SQL Server. Il a été testée avec Microsoft Access 97 et versions ultérieures et SQL Server 6.5 et versions ultérieures.

Cause

Au sein d'une application qui utilise Stdio.h, Ios.h ou streamb.h (notamment AFXWIN.h), EOF a déjà été définie comme une constante (-1). L'instruction # import essaie ensuite de définir la propriété EOF pour ADO Recordset ou RDO objet ResultSet et génère les erreurs C2629/C2238 sur la ligne suivante de code généré msado15.tlh (ou msado10.tlh) si vous utilisez ADO 1.0 fichier :
VARIANT_BOOL EOF;
				
cette ligne tente de définir une variable, mais EOF a déjà définie comme -1. Par conséquent, cette ligne de code correspondante :
short -1;
				
Ceci ne se compile pas car -1 n'est pas un nom de variable valide.

Résolution

Pour résoudre ce problème, vous pouvez utiliser l'attribut de changement de nom de # import comme suit :
   #import <msado15.dll>
    rename( "EOF", "A_EOF" )
				
rename modifie le nom de n'importe quelle chaîne "EOF" # import recherche dans la bibliothèque de types spécifié une nouvelle valeur.

Un autre solution consiste à annuler la définition de EOF avant importation ADO suit :
#undef EOF
#import <msado15.dll> rename_namespace("ADO20")
				

Statut

Ce comportement est voulu par la conception même du produit.

Plus d'informations

Le fichier suivant est disponible au téléchargement à partir du centre de téléchargement Microsoft :

DUPS.exe
Date de publication: Jan-14-2000

Pour plus d'informations sur la façon de télécharger des fichiers de support technique Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
119591Procédure pour obtenir des fichiers de support technique Microsoft auprès des services en ligne
Microsoft a analysé ce fichier pour les virus. Microsoft utilisé les logiciels de détection de virus les plus récentes ne sont associé à la date à laquelle le fichier a été validé. Le fichier est stocké sur des serveurs sécurisés, empêchant toute modification non autorisée du fichier. Cet article et son code associé seront mise à jour périodiquement. Tous les commentaires sont les bienvenues et seront prises en considération dans les futures mises à jour. (Utilisez le lien submit dynamique dans le cadre de droite en commentaire.)
Microsoft fournit des exemples de programmation à des fins d'illustration uniquement, sans garantie expresse ou implicite, y compris, sans que cela soit limitatif, les garanties implicites de qualité marchande et/ou d'adéquation à un usage particulier. Cet article suppose que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du support technique Microsoft peuvent vous aider à comprendre la fonctionnalité d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.
Si vous ne maîtrisez que partiellement la programmation, il convient contacter un partenaire certifié Microsoft ou les services de conseil Microsoft. Pour plus d'informations, visitez ces sites Web de Microsoft :

Microsoft certifié partners - https://partner.microsoft.com/global/30000104

Avis de Microsoft Services - http://support.microsoft.com/gp/advisoryservice

Pour plus d'informations sur les options de support technique disponibles et sur la façon de contacter Microsoft, reportez-vous au site Web de Microsoft à l'adresse suivante : http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSLe package DUPS peut être utilisé sur un seul ordinateur ou utilisé pour suivre l'historique de la DLL de chaque DLL sur le réseau. Il s'exécute sous Windows 95 vers Windows 2000 et dans que son mode de la plus simple n'a pas de dépendances. Le package DUPS se compose des trois utilitaires de C++ et plusieurs afficheurs de Visual Basic.

Si vous souhaitez uniquement comparer les DLL une application utilise sur deux ordinateurs (ordinateur A et l'ordinateur B), exécutez le programme Dlister.exe. Par défaut Dlister crée un fichier dans le répertoire C:\ portant le nom Comp_DLL.txt où comp est le nom de l'ordinateur exécutant Dlister. Vous pouvez également spécifier cette Dlister écrire dans une base de données, ou vous pouvez spécifier un autre répertoire dans lequel le fichier doit être créé.

Il existe deux façons de remplacer les paramètres par défaut Dlisters attribut. Dlister et les visionneuses de Visual Basic obtenir cette clé de Registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell
Et les valeurs suivantes :
ConnectionString, fileTableDir
Vous pouvez utiliser l'applet de Visual Basic DllHell\C_clients\ATL4VB\VbregSetup pour définir ces valeurs ou vous pouvez exécuter simplement Dlister et il crée des valeurs par défaut. Par exemple, si le paramètre ConnectString à :
Provider=SQLOLEDB.1;Initial Catalog=dllHell;Data Source=dsc3_ts;
					
provoque Dlister écrire des valeurs à SQL Server base de données dllHell, tandis que :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dllHell.mdb
					
utilise une base de données Microsoft Access locale.

Pour remplacer les valeurs par défaut, la seconde consiste en définissant les attributs dans le fichier DllHell.ini dans le répertoire Dlister.exe. Ces fichiers sont décompressés dans le répertoire DllHell\C_clients\Dlister\Release\.

Un fichier nommé xdllHell.ini est inclus dans l'échantillon avec une chaîne de connexion que vous pouvez modifier. (Renommer cette dllHell.ini si vous souhaitez l'utiliser).

Si ordinateur A et les deux lesquels ActiveX Data Objects (ADO) est installé, l'approche la plus simple pour remplir la base de données dllHell consiste à définir la chaîne de connexion à la base de données SQL Server ou Jet l'ordinateur B. Vous pouvez également exécuter Dlister en mode de fichier texte puis utiliser l'utilitaire C++ DllHell\C_clients\Dlister\readtxttbl\Release\DlgDtxt2DB.exe pour lire le fichier de texte de sortie dans la base de données DllHell. L'application MFC ReadTxtTbl est également utile pour la lecture dans le texte de données clients vous envoyer des messages. Vous devez inscrire les serveurs COM DUPS\C_clients\ATL4VB\r1RegMon\ReleaseMinDependency\r1RegMon.dll et DUPS\C_clients\ATL4VB\readDlls\R1readTxtMod\ReleaseMinDependency\R1readTxtMod.dll à utiliser les visionneuses de Visual Basic.

Vous pouvez activer les totaux de contrôle CRC en définissant la clé de Registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell ComputeCRC sur 0 x 1 sur les systèmes exécutant Windows 2000. Une fois que vous accédez à cette clé, vous pouvez l'ajouter à vos favoris. Les utilisateurs Windows NT 4 doivent accédez manuellement à cette clé.

Création de la base de données DllHell

SQL Server 7.0 est recommandée, mais Microsoft Access 2000 fonctionne également. Pour créer la base de données DLLhell vous pouvez utiliser SQL Server Enterprise Manager pour créer une base de données vide nommée DLLhell. À partir de l'Analyseur de requêtes SQL Server fenêtre, sélectionnez DLLhell dans la base de données de zone de liste déroulante. Exécutez le script DllHell\SQL\dllHellSchema.sql dans cette fenêtre et crée toutes les tables nécessaires pour Dllhell.

Ou bien, vous pouvez exécuter la commande suivante dans l'Analyseur de requêtes SQL Server :
EXEC sp_attach_single_file_db 'DLLhell', 'DllHell\SQL\dllHell_Data.MDF'
				
le code crée la base de données et toutes les tables.

Comparaison entre les DLL sur deux systèmes

Pour comparer toutes les DLL sur deux systèmes utilisent cmpWithList utilitaire Visual Basic dans le répertoire Dllhell\VBviewers\VBcmpList2.

Pour limiter les comparaisons DLL (généralement à ces DLL charge une application cible) vous devez également disposer d'un fichier texte (.txt) contenant les DLL que vous souhaitez comparer. Cette liste peut être créée avec Depends ou un des nombreux outils (tels que ListDLLs et Process Explorer) à partir du site Web suivant :
http://technet.microsoft.com/en-us/sysinternals/default.aspx

À l'aide de cmpWithList

Démarrage cmpWithList il affiche une liste d'ordinateurs dans la base de données DLLhell dans la zone de liste d'ordinateurs. Par défaut, les deux premiers ordinateurs dans la liste sont sélectionnés pour la comparaison. Pour modifier l'ordinateur cible, sélectionnez dans la zone de liste, puis sélectionnez le bouton Modifier. Le Comp1 et le Comp2 modifier les zones afficher quels ordinateurs vous comparerez.

Utilisez le contrôle de navigation de répertoire pour sélectionner le fichier texte contenant les noms de toutes les DLL que vous souhaitez comparer sur les deux systèmes. Double-clic sur le fichier texte la sélectionne.

Si vous ne souhaitez pas comparer dll dans certains répertoires (généralement vous ne souhaitez pas sur les DLL dans winnt\system32\dllcache et WINNT\ $ NtServicePackUninstall $), double-cliquez sur la ligne dans la grille. Vous serez invité à ajouter le répertoire à la table _skipDir. DLL dans le _skipDir n'est pas prises en considération pour la comparaison.

Installation de réseau automatique DLL audit

Configuration de la prévisions sur les systèmes Windows 2000 :

Démarrer avec le fichier de commande dllHell\rcomp.cmd. Modifiez les variables d'environnement suivantes pour refléter votre système :
  1. Dpath : Répertoire sur le client où Dlister crée la fichier texte contenant la liste des DLL sur le client. La valeur par défaut est C:\temp\DLLhell\
  2. COMP : Nom de l'ordinateur client.
  3. ChangeFileLocation : Chemin d'accès au réseau complet dans lequel la DLL les différences de fichier doit être copié. Il s'agit du répertoire qui le HellsMonitor montres de service.
  4. ServerLst : Le chemin de réseau où se trouve le répertoire C_clients du package DLLhell.
Dans la barre des tâches, cliquez sur le bouton Démarrer, pointez sur programmes, pointez sur Accessoires, pointez sur Outils système, puis cliquez sur Tâches planifiées.

Activer l'applet Ajouter une tâche planifiée. Accédez au répertoire local qui contient le fichier rcomp.cmd et sélectionnez-le. Après avoir sélectionné les options de que l'Assistant présente, le fichier rcomp.cmd est ajouté aux tâches planifiées. La première fois que vous configurez le travail planifié, sélectionner l'heure de début 2 à 5 minutes à l'avenir pour vous permettre de tester vos paramètres. Il est souvent pratique de ne pas commenter la commande pause afin que vous pouvez voir les erreurs qui se produisent.

Enregistrez le fichier service de surveillance

À partir de la Dllhell\C_clients\HellsMonitor\ReleaseUMinDependency exécutez cette commande, qui inscrit le service de répertoire :
HellsMonitor /Service
				
la partie la plus importante est le client de moniteur. Il s'agit d'une interface graphique utilisateur qui vous permet d'ajouter ou supprimer les répertoires à surveiller. Vous permet de spécifier l'application de s'exécuter (avec un bouton de navigation pratique). Pour DUPS système de surveillance, l'application est Dllhell\C_clients\Dlister\ReadTxtTblCmdLine\Debug\ReadTxtTblCmdLine.exe.

Pour ajouter un répertoire à surveiller, cliquez sur Ajouter. Cette ouvre une boîte de dialogue de navigation de répertoire que vous pouvez parcourir le répertoire vous souhaitez surveiller. Pour supprimer un répertoire ou des répertoires, sélectionnez les répertoires à supprimer, puis cliquez sur Supprimer. Pour spécifier l'application s'exécute des types dans ou parcourez l'arborescence à celui-ci. Si vous ne spécifiez pas un chemin d'accès, il doit être dans le chemin d'accès système quelque part. Ensuite, cliquez sur Set pour définir le moniteur pour exécuter cette application lorsqu'une modification est détectée.

Remarque : le bouton set (définir) est activé uniquement lorsque vous modifiez l'application pour exécuter à partir de ce qu'elle est actuellement définie. Le bouton Supprimer est activé uniquement lorsque vous avez choisis de supprimer des répertoires.

Références

Pour plus d'informations, consultez les rubriques suivantes :
"The End of DLL Hell"

Propriétés

Numéro d'article: 166112 - Dernière mise à jour: samedi 22 février 2014 - Version: 4.6
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ActiveX Data Objects 1.0 sur le système suivant
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Édition Entreprise
    • Microsoft Visual C++ 5.0 Édition Entreprise
    • Microsoft Visual C++ 6.0 Édition Entreprise
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Professionnelle
    • Microsoft Visual C++ 6.0 Édition Professionnelle
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.0 sur le système suivant
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Édition Entreprise
    • Microsoft Visual C++ 5.0 Édition Entreprise
    • Microsoft Visual C++ 6.0 Édition Entreprise
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Professionnelle
    • Microsoft Visual C++ 6.0 Édition Professionnelle
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.1 sur le système suivant
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Édition Entreprise
    • Microsoft Visual C++ 5.0 Édition Entreprise
    • Microsoft Visual C++ 6.0 Édition Entreprise
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Professionnelle
    • Microsoft Visual C++ 6.0 Édition Professionnelle
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.5 sur le système suivant
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Édition Entreprise
    • Microsoft Visual C++ 5.0 Édition Entreprise
    • Microsoft Visual C++ 6.0 Édition Entreprise
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Professionnelle
    • Microsoft Visual C++ 6.0 Édition Professionnelle
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.6 sur le système suivant
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Édition Entreprise
    • Microsoft Visual C++ 5.0 Édition Entreprise
    • Microsoft Visual C++ 6.0 Édition Entreprise
    • Microsoft Visual C++ 4.2 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Professionnelle
    • Microsoft Visual C++ 6.0 Édition Professionnelle
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Data Access Components 2.1 Service Pack 2
Mots-clés : 
kbnosurvey kbarchive kbmt kbdownload kbdatabase kbprb kbprogramming KB166112 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: 166112
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