PROBLEMA: Conflitos com #import EOF quando utilizar com o ADO

Traduções de Artigos Traduções de Artigos
Artigo: 166112 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Com #import, é possível gerar classes que encapsulam o typelib base de dados API, como, por exemplo, ActiveX Data Objects (ADO), uma aplicação do windows. Por exemplo:
   // Excerpt from Stdafx.h
   #include <afxwin.h>           // MFC core and standard components.
   ...
   #import <msado15.dll>        //for ADO 1.0, import "msado10.dll"
 
				
ao fazê-lo, poderá receber os seguintes erros do #import ADO na propriedade Recordset.EOF:
Erro C2629: inesperado ' curto '
Erro C2238: inesperado token(s) anterior ';'
A ferramenta de DLL universal problema Solver (DUPS.exe) é um exemplo que contém todos os utilitários documentados Janeiro de 2000 newsgroups da MSDN (Microsoft Developer Network) artigo "A fim de DLL Hell." Reveja que MSDN artigo antes de ler este artigo.

O pacote DUPS é um conjunto de utilitários que pode utilizar para controlar e comparar versões DLL em vários computadores baseados no Windows. O número máximo é regulado pela instalação do SQL Server ou o Microsoft Access. O cliente Dlister que enumera as DLLs num sistema execute no Windows 95 ou Windows 98, Windows NT 4.0 e Windows 2000. Os utilitários de visualização foram desenvolvidos no Windows NT 4.0 e Windows 2000 e requerem o Microsoft Access ou o Microsoft SQL Server. Foi testado com o Microsoft Access 97 e versões posteriores e SQL Server 6.5 e versões posteriores.

Causa

Dentro de uma aplicação que utilize Stdio.h, Ios.h ou Streamb.h (incluindo Afxwin.h), EOF já foi definido como uma constante (-1). O #import tenta, em seguida, defina a propriedade EOF Recordset do ADO ou RDO de objectos de conjunto de resultados e gera os erros C2629/C2238 na seguinte linha de código gerado no msado15.tlh (ou msado10.tlh) se for utilizado ADO 1.0 ficheiro:
VARIANT_BOOL EOF;
				
esta linha está a tentar definir uma variável, mas o EOF já definido-lo como -1. Como resultado, esta linha de código analisa a:
short -1;
				
isto não compilar porque-1 não é um nome de variável válido.

Resolução

Para corrigir este problema, pode utilizar o atributo de mudar o nome do #import da seguinte forma:
   #import <msado15.dll>
    rename( "EOF", "A_EOF" )
				
mudar o nome altera o nome de qualquer cadeia de "EOF" #import localiza o typelib especificado para um novo valor.

Outra correcção é anule EOF antes de importar ADO segue:
#undef EOF
#import <msado15.dll> rename_namespace("ADO20")
				

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

O ficheiro seguinte está disponível para transferência a partir do Centro de transferências da Microsoft:

DUPS.exe
Data de edição: 14-Janeiro de 2000

Para obter informações adicionais sobre como transferir ficheiros de suporte da Microsoft, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
119591Como obter ficheiros de suporte da Microsoft a partir de serviços on-line
Microsoft procedeu de vírus neste ficheiro. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o ficheiro foi publicado. O ficheiro é alojado em servidores com segurança avançada que o ajudam a impedir alterações não autorizadas ao ficheiro. Este artigo e o código correspondente serão actualizadas periodicamente. Todos os comentários são bem-vindas e irão ser considerados em futuras actualizações. (Utilize hotlink submeter na frame da direita para comentar.)
Microsoft fornece exemplos de programação ilustração só, sem garantia expressa ou implícita, incluindo, sem limitação, garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas utilizadas para criar e depurar procedimentos. Profissionais de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas.
Se dispõe de limitada experiência de programação, poderá contactar um Microsoft Certified Partner ou a serviços de aviso. Para obter mais informações, visite estes Web sites da Microsoft:

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

Serviços Microsoft aviso - http://support.microsoft.com/gp/advisoryservice

Para obter mais informações sobre as opções de suporte estão disponíveis e sobre como contactar a Microsoft, visite o seguinte Web site da Microsoft: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSO pacote DUPS pode ser utilizado num único computador ou utilizado para controlar o histórico DLL de cada DLL na rede. É executado no Windows 95 para o Windows 2000 e no que respectivo modo mais simples não tem dependências. O pacote DUPS consiste em três utilitários de C++ e vários visualizadores de Visual Basic.

Se pretender comparar as DLLs apenas uma aplicação está a utilizar em dois computadores (computador A e o computador B), execute o programa Dlister.exe. Por predefinição Dlister cria um ficheiro no directório C:\ com o nome Comp_DLL.txt onde comp é o nome do computador que está a executar o Dlister. Também pode especificar que Dlister escrever para uma base de dados ou pode especificar outro directório na qual o ficheiro deve ser criado.

Existem duas formas para substituir as predefinições de atributo Dlisters. Dlister e visualizadores do Visual Basic obter esta chave de registo:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell
E os seguintes valores:
ConnectionString, fileTableDir
Pode utilizar a aplicação do Visual Basic DllHell\C_clients\ATL4VB\VbregSetup para definir estes valores ou pode simplesmente executar Dlister e cria os valores predefinidos. Por exemplo, definir a cadeialigação:
Provider=SQLOLEDB.1;Initial Catalog=dllHell;Data Source=dsc3_ts;
					
faz com que Dlister escrever valores para o SQL Server dllHell a base de dados, enquanto:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dllHell.mdb
					
utiliza uma base de dados local do Microsoft Access.

É a segunda forma para substituir predefinições definindo os atributos no ficheiro DllHell.ini no directório Dlister.exe. Estes ficheiros são descompactados no directório DllHell\C_clients\Dlister\Release\.

Um ficheiro denominado xdllHell.ini está incluído no exemplo com uma cadeia de ligação que pode modificar. (Mude o nome deste dllHell.ini se pretender utilizá-lo.)

Se computador A e o computador B ambos os ter instalado o ActiveX Data Objects (ADO), a abordagem mais simples para povoar a base de dados dllHell é definir a cadeia de ligação à base de dados Jet ou SQL Server. Em alternativa, poderá executar Dlister no modo de ficheiro de texto e utilizar o utilitário de C++ DllHell\C_clients\Dlister\readtxttbl\Release\DlgDtxt2DB.exe ler o ficheiro de texto de saída na base de dados DllHell. Aplicação MFC ReadTxtTbl também é útil para leitura no texto que clientes de dados de correio electrónico. Tem de registar os servidores COM DUPS\C_clients\ATL4VB\r1RegMon\ReleaseMinDependency\r1RegMon.dll e DUPS\C_clients\ATL4VB\readDlls\R1readTxtMod\ReleaseMinDependency\R1readTxtMod.dll utilizar visualizadores do Visual Basic.

Pode activar as somas de verificação de erros de CRC, definindo a chave de registo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell ComputeCRC para 0 x 1 em sistemas com o Windows 2000. Depois de navegar para esta chave, é possível adicionar aos Favoritos. Os utilizadores do Windows NT 4 tem navegue manualmente para esta chave.

Criar a base de dados DllHell

SQL Server 7.0 é recomendada, mas o Microsoft Access 2000 também funciona. Para criar a base de dados DLLhell pode utilizar o SQL Server Enterprise Manager para criar uma base de dados vazia denominada DLLhell. A partir do SQL Server Query Analyzer janela, seleccione DLLhell pendente da base de dados - para baixo de caixa de listagem. Execute o script DllHell\SQL\dllHellSchema.sql nesta janela e cria todas as tabelas necessárias para Dllhell.

Em alternativa, pode executar o seguinte comando no SQL Server Query Analyzer:
EXEC sp_attach_single_file_db 'DLLhell', 'DllHell\SQL\dllHell_Data.MDF'
				
o código cria a base de dados e todas as tabelas.

Comparar as DLLs em dois sistemas

Para comparar todas as DLLs em dois sistemas utilize o utilitário de Visual Basic cmpWithList no directório Dllhell\VBviewers\VBcmpList2.

Para limitar as comparações DLL (normalmente para apenas as DLL carrega uma aplicação de destino) também tem de ter um ficheiro de texto (.txt) que contém as DLLs que pretende comparar. Pode criar esta lista com Depends ou uma das várias ferramentas (tais como ListDLLs e Process Explorer) a partir do seguinte Web site:
http://technet.microsoft.com/en-us/sysinternals/default.aspx

Utilizar cmpWithList

Quando é iniciado cmpWithList mostra uma lista de computadores na base de dados DLLhell na caixa de listagem computadores. Por predefinição, os primeiros dois computadores na lista são seleccionados para comparação. Para alterar o computador de destino, seleccione-o na caixa de listagem e, em seguida, seleccione o botão alterar . Comp1 os Comp2 editar caixas mostrar quais os computadores que vai comparar.

Utilize o controlo de navegação do directório para seleccionar o ficheiro de texto que irá conter os nomes de todas as DLLs que deseja comparar nos dois sistemas. Duplo clique no ficheiro de texto a seleccionar.

Se não pretender comparar as DLLs em alguns directórios (normalmente que não interessa dll winnt\system32\dllcache e WINNT\ $ NtServicePackUninstall $) faça duplo clique sobre a linha de grelha. -Lhe-á ser pedido para adicionar o directório para a tabela _skipDir. DLL do _skipDir não são consideradas para comparação.

Instalação automática rede DLL auditoria

Configurar a agenda nos sistemas Windows 2000:

Iniciar com o ficheiro de comandos dllHell\rcomp.cmd. Altere as seguintes variáveis de ambiente para reflectir o sistema:
  1. Dpath: Directório cliente onde Dlister cria a lista de ficheiro de texto de dll no cliente. A predefinição é C:\temp\DLLhell\
  2. COMP: O nome do computador cliente.
  3. ChangeFileLocation: O caminho de rede completo onde a DLL diferenças ficheiro deve ser copiado. Este é o directório que o HellsMonitor serviço relógios.
  4. ServerLst: O caminho de rede onde se encontra no directório C_clients de pacote DLLhell.
Na barra de tarefas, clique no botão Iniciar , aponte para programas , aponte para Acessórios , aponte para Ferramentas do sistema e, em seguida, clique em Tarefas agendadas .

Active a aplicação Adicionar tarefa agendada . Navegue para o directório local que contém o ficheiro rcomp.cmd e seleccioná-la. Depois de seleccionar as opções que apresenta o assistente, o ficheiro rcomp.cmd é adicionado às tarefas agendadas. A primeira vez que configurou a tarefa agendada, seleccione a hora de início 2-5 minutos no futuro para que pode testar as definições. Muitas vezes, é conveniente uncomment o comando pause para que possa ver quaisquer erros que ocorram.

Registar o ficheiro de monitorização do serviço

A partir de Dllhell\C_clients\HellsMonitor\ReleaseUMinDependency executar este comando, que regista o serviço de directório:
HellsMonitor /Service
				
a parte mais importante é o cliente de monitor. Esta é uma interface gráfica que lhe permite adicionar ou remover os directórios para monitorizar. Também permite especificar a aplicação seja executada (com um botão de procura útil). Para DUPS monitorização do sistema, a aplicação é Dllhell\C_clients\Dlister\ReadTxtTblCmdLine\Debug\ReadTxtTblCmdLine.exe.

Para adicionar um directório para monitorizar, clique em Adicionar . Esta abre uma caixa de diálogo de procura directório onde pode navegar para o directório pretende monitorizar. Para remover um directório ou directórios seleccione os directórios que pretende remover e, em seguida, clique em Remover . Para especificar a aplicação seja executada qualquer tipo-lo ou navegue para o mesmo. Se não especificar um caminho tem de estar no caminho do sistema local. Em seguida, clique em a conjunto de mensagens em fila para definir o monitor para executar essa aplicação quando for detectada uma alteração.

Nota : O botão ' Definir ' só está activado quando altera a aplicação seja executada a partir do qual está actualmente definida. O botão Remover é activado apenas quando tiver seleccionados para remover directórios.

Referências

Para mais informações, consulte o seguinte:
"The End of DLL Hell"

Propriedades

Artigo: 166112 - Última revisão: 23 de fevereiro de 2014 - Revisão: 4.6
A informação contida neste artigo aplica-se a:
  • Microsoft ActiveX Data Objects 1.0 nas seguintes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • 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 Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.0 nas seguintes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • 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 Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.1 nas seguintes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • 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 Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.5 nas seguintes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • 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 Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.6 nas seguintes plataformas
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • 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 Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Data Access Components 2.1 Service Pack 2
Palavras-chave: 
kbnosurvey kbarchive kbmt kbdownload kbdatabase kbprb kbprogramming KB166112 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 166112

Submeter comentários

 

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