PRB: Conflicto con EOF al utilizar # import con ADO

Seleccione idioma Seleccione idioma
Id. de artículo: 166112 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Con # import, es posible generar clases que encapsulan la biblioteca de tipos de bases de datos API, como ActiveX Data Objects (ADO) de una aplicación para windows. Por ejemplo:
   // Excerpt from Stdafx.h
   #include <afxwin.h>           // MFC core and standard components.
   ...
   #import <msado15.dll>        //for ADO 1.0, import "msado10.dll"
 
				
al hacerlo, puede aparecer los errores siguientes en el # Import para ADO en la propiedad Recordset.EOF:
Error C2629: inesperado ' corta '
Error C2238: símbolos (token) inesperado anterior ';'
La herramienta Solver de problema universal de DLL (DUPS.exe) es un ejemplo que contiene todas las utilidades documentadas en enero de 2000 Developer Network (MSDN) noticias artículo "El final de la DLL Hell". Revise que MSDN artículo antes de leer este artículo.

El paquete DUPS es un conjunto de utilidades que puede utilizar para realizar un seguimiento y comparar versiones DLL en varios equipos basados en Windows. El número máximo se rige por la instalación de SQL Server o Microsoft Access. El cliente de Dlister que enumera los archivos DLL en un sistema se ejecuta en Windows 95 o Windows 98, Windows NT 4.0 y Windows 2000. Las utilidades de visualización se desarrollaron en Windows NT 4.0 y Windows 2000 y requieren Microsoft Access o Microsoft SQL Server. Se ha probado con Microsoft Access 97 y versiones posteriores y SQL Server 6.5 y versiones posteriores.

Causa

Dentro de una aplicación que utiliza stdio.h, Ios.h o streamb.h (incluyendo AFXWIN.h), EOF ya se ha definido como una constante (-1). El # Import a continuación, intenta definir la propiedad EOF para Recordset de ADO o RDO objetos de conjunto de resultados y genera los errores de C2629/C2238 en la siguiente línea de código generado en el msado15.tlh (o msado10.tlh) si se utiliza ADO 1.0 archivo:
VARIANT_BOOL EOF;
				
esta línea está intentando definir una variable, pero EOF ya definido como -1. Como resultado, se analiza esta línea de código a:
short -1;
				
esto no se compila porque-1 no es un nombre válido de variable.

Solución

Para corregir este problema, puede utilizar el atributo de nombre de # import como sigue:
   #import <msado15.dll>
    rename( "EOF", "A_EOF" )
				
Rename cambia el nombre de cualquier cadena de "EOF" # Import se encuentra en la biblioteca de tipos especificado en un nuevo valor.

Otra solución es anular EOF antes de importar ADO sigue:
#undef EOF
#import <msado15.dll> rename_namespace("ADO20")
				

Estado

Este comportamiento es por diseño.

Más información

El archivo siguiente está disponible para descargarlo del Centro de descarga de Microsoft:

DUPS.exe
Fecha de lanzamiento: 14-Ene-2000

Para obtener información adicional acerca de cómo descargar los archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
119591Cómo obtener Archivos de soporte técnico de Microsoft desde los servicios en línea
Microsoft exploró este archivo en busca de virus. con el software de detección de virus más reciente disponible en la fecha de publicación. Asimismo, el archivo se almacenó en servidores seguros que ayudan a impedir la realización de cambios no autorizados. Este artículo y su código correspondiente se actualizará periódicamente. Todos los comentarios son de bienvenida y se considerará en futuras actualizaciones. (Utilice el hotlink de envío en el marco derecho para comentarios.)
Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita, incluyendo, pero sin limitarse a, las garantías implícitas de comerciabilidad e idoneidad para un propósito determinado. En este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y las herramientas utilizadas para crear y depurar procedimientos. Los profesionales de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos a necesidades específicas.
Si tiene poca experiencia en programación, desea póngase en contacto con un Microsoft Certified Partner o servicios de consultoría de Microsoft. Para obtener más información, visite estos sitios Web de Microsoft:

Microsoft certificado Partners - https://partner.microsoft.com/global/30000104

Servicios de asesoramiento de Microsoft - http://support.microsoft.com/gp/advisoryservice

Para obtener más información acerca de las opciones de soporte técnico que están disponibles y cómo ponerse en contacto con Microsoft, visite el siguiente sitio Web de Microsoft: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSEl paquete DUPS puede ser utilizado en un único equipo o hacer un seguimiento del historial DLL de cada DLL en la red. Se ejecuta en Windows 95 a Windows 2000 y en que su modo más sencillo no tiene dependencias. El paquete DUPS consta de las tres utilidades de C++ y varios visores de Visual Basic.

Si sólo desea comparar las DLL de una aplicación está utilizando en dos equipos (el equipo y el equipo B), ejecute el programa Dlister.exe. De forma predeterminada Dlister crea un archivo en el directorio C:\ con el nombre Comp_DLL.txt donde comp es el nombre del equipo que ejecuta Dlister. También puede especificar que Dlister escribir en una base de datos, o puede especificar otro directorio en el que se debe crear el archivo.

Hay dos formas de reemplazar Dlisters valores predeterminados de atributo. Dlister y los visores de Visual Basic obtener esta clave del registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell
Y los valores siguientes:
ConnectionString, fileTableDir
Puede utilizar el subprograma de Visual Basic DllHell\C_clients\ATL4VB\VbregSetup para establecer estos valores o puede ejecutar simplemente Dlister y crea los valores predeterminados. Por ejemplo, si se establece el parámetro ConnectString en:
Provider=SQLOLEDB.1;Initial Catalog=dllHell;Data Source=dsc3_ts;
					
hace que Dlister escribir valores en SQL Server dllHell base de datos, mientras:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dllHell.mdb
					
utiliza una base de datos local de Microsoft Access.

La segunda forma de reemplazar los valores predeterminados se está estableciendo los atributos en el archivo DllHell.ini en el directorio Dlister.exe. Estos archivos se descomprime en el directorio DllHell\C_clients\Dlister\Release\.

Un archivo denominado xdllHell.ini se incluye en el ejemplo con una cadena de conexión que se puede modificar. (Cambie el nombre esta dllHell.ini si desea utilizarla).

Si equipo A y el equipo B ambos tienen instalado ActiveX Data Objects (ADO), el enfoque más sencillo para rellenar la base de datos dllHell consiste en establecer la cadena de conexión en la base de datos de SQL Server o Jet. Como alternativa, puede ejecutar Dlister en modo de archivo de texto luego usar la utilidad de C++ DllHell\C_clients\Dlister\readtxttbl\Release\DlgDtxt2DB.exe para leer el archivo de texto de salida en la base de datos DllHell. La aplicación MFC ReadTxtTbl también es útil para leer en el texto que los clientes de datos por correo electrónico. Debe registrar los servidores COM DUPS\C_clients\ATL4VB\r1RegMon\ReleaseMinDependency\r1RegMon.dll y DUPS\C_clients\ATL4VB\readDlls\R1readTxtMod\ReleaseMinDependency\R1readTxtMod.dll para utilizar los visores de Visual Basic.

Puede habilitar las sumas de comprobación CRC estableciendo la clave del registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell ComputeCRC a 0 x 1 base de datos en sistemas que ejecuten Windows 2000. Desplazarse a esta clave, se puede agregar a Favoritos. Los usuarios de Windows NT 4 deben desplazarse manualmente a esta clave.

Crear la base de datos DllHell

Se recomienda SQL Server 7.0, pero también funciona Microsoft Access 2000. Para crear la base de datos DLLhell puede utilizar el Administrador corporativo de SQL Server para crear una base de datos vacía llamada DLLhell. Desde el el Analizador de consultas SQL Server ventana, seleccione DLLhell en la base de datos de cuadro de lista desplegable. Ejecute el script DllHell\SQL\dllHellSchema.sql en esta ventana y se crea todas las tablas necesarias para Dllhell.

Como alternativa, puede ejecutar el comando siguiente en el Analizador de consultas de SQL Server:
EXEC sp_attach_single_file_db 'DLLhell', 'DllHell\SQL\dllHell_Data.MDF'
				
el código crea la base de datos y todas las tablas.

Comparar los archivos DLL en dos sistemas

Para comparar todas las DLL en dos sistemas, use la utilidad de Visual Basic cmpWithList en el directorio Dllhell\VBviewers\VBcmpList2.

Para limitar las comparaciones DLL (normalmente para sólo esos archivos DLL se carga una aplicación de destino) debe tener también un archivo de texto (.txt) que contiene los archivos DLL que desea comparar. Puede crear esta lista con Depends o una de varias herramientas (como ListDLLs y Process Explorer) desde el sitio Web siguiente:
http://technet.microsoft.com/en-us/sysinternals/default.aspx

Mediante cmpWithList

Cuando se inicia cmpWithList muestra una lista de equipos de la base de datos DLLhell en el cuadro de lista equipos. De forma predeterminada, se seleccionan los primeros dos equipos en la lista para la comparación. Para cambiar el equipo de destino, selecciónelo en el cuadro de lista y, a continuación, seleccione el botón cambiar . El Comp1 y Comp2 editar cuadros mostrar qué equipos comparará.

Utilice el control de exploración de directorios para seleccionar el archivo de texto que contendrá los nombres de todas las DLL que desee comparar en los dos sistemas. Hacer doble clic en el archivo de texto selecciona.

Si no desea comparar la DLL en algunos directorios (normalmente no le importa acerca de la DLL en winnt\system32\dllcache y WINNT\ $ NtServicePackUninstall $) haga doble clic en la fila en la cuadrícula. Se le pedirá para agregar el directorio a la tabla _skipDir. Archivos DLL en el _skipDir no se consideran para la comparación.

Instalar red automática DLL auditoría

Configurar la programación en los sistemas Windows 2000:

Iniciar con el archivo de comandos dllHell\rcomp.cmd. Cambiar las siguientes variables de entorno para reflejar su sistema:
  1. Dpath: Directorio en el cliente donde Dlister cree la lista del archivo de texto de DLL en el cliente. El valor predeterminado es C:\temp\DLLhell\
  2. COMP: Nombre del equipo cliente.
  3. ChangeFileLocation: Se debe copiar la ruta de red completa donde el archivo DLL de diferencias de archivo. Éste es el directorio que el HellsMonitor inspecciones de servicio.
  4. ServerLst: Ruta de red donde está ubicado el directorio C_clients del paquete DLLhell.
En la barra de tareas, haga clic en el botón Inicio , seleccione programas , Accesorios , Herramientas del sistema y, a continuación, haga clic en Tareas programadas .

Activar el subprograma Agregar tarea programada . Vaya al directorio local que contiene el archivo rcomp.cmd y selecciónelo. Después de seleccionar las opciones que presenta el asistente, el archivo rcomp.cmd se agrega a los trabajos programados. La primera vez que configure el trabajo programado, seleccione la hora de inicio 2 a 5 minutos en el futuro por lo que puede probar la configuración. A menudo es conveniente quite comentario el comando de pausa para que puede ver los errores ocurridos.

Registrar el archivo de servicio de supervisión

Desde el Dllhell\C_clients\HellsMonitor\ReleaseUMinDependency ejecutar este comando, que registra el servicio de directorio:
HellsMonitor /Service
				
parte más importante es el cliente de monitor. Se trata de una GUI que permite agregar o quitar los directorios que supervisar. También permite especificar la aplicación se ejecute (con un botón de exploración útil). Para DUPS sistema de supervisión, la aplicación es Dllhell\C_clients\Dlister\ReadTxtTblCmdLine\Debug\ReadTxtTblCmdLine.exe.

Para agregar un directorio para supervisar, haga clic en Agregar . Este abre un cuadro de diálogo de examinar de directorio donde puede examinar el directorio desee supervisar. Para quitar un directorio o directorios, seleccione los directorios que desea quitar y, a continuación, haga clic en Quitar . Para especificar la aplicación para ejecutar cualquier tipo en o examinar a él. Si no especifica una ruta de acceso tiene que estar en la ruta de acceso del sistema en algún lugar. A continuación, haga clic en Configurar para configurar el monitor para ejecutar esta aplicación cuando se detecta un cambio.

Nota : el botón de conjunto sólo está habilitado cuando cambien la aplicación para ejecutarse desde lo que está actualmente establecido. El botón Quitar se habilita sólo cuando haya seleccionado para quitar de directorios.

Referencias

Para obtener más información, consulte lo siguiente:
"The End of DLL Hell"

Propiedades

Id. de artículo: 166112 - Última revisión: sábado, 22 de febrero de 2014 - Versión: 4.6
La información de este artículo se refiere a:
  • Microsoft ActiveX Data Objects 1.0 sobre las siguientes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.0 sobre las siguientes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.1 sobre las siguientes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.5 sobre las siguientes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.6 sobre las siguientes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Data Access Components 2.1 Service Pack 2
Palabras clave: 
kbnosurvey kbarchive kbmt kbdownload kbdatabase kbprb kbprogramming KB166112 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 166112

Enviar comentarios

 

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