PROBLEMA: Conflito com # Import EOF quando usando com ADO

Traduções deste artigo Traduções deste artigo
ID do artigo: 166112 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Com o # Import, é possível gerar classes que encapsulam o typelib de banco de dados da API, como o ActiveX Data Objects (ADO), dentro de um aplicativo 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 fazer isso, você pode receber os seguintes erros de # import para ADO na propriedade Recordset.EOF:
Erro C2629: inesperado ' curto '
Erro C2238: inesperado token(s) anterior ';'
A ferramenta Solver problema universal de DLL (DUPS.exe) é um exemplo que contém todos os utilitários documentados em janeiro de 2000 artigo de notícias do MSDN (Microsoft Developer Network) "A fim de DLL Hell." Verifique que MSDN artigo antes de ler este artigo.

O pacote DUPS é um conjunto de utilitários que você pode usar para controlar e comparar versões DLL em vários computadores baseados no Windows. O número máximo é regido por sua instalação do SQL Server ou o Microsoft Access. O cliente Dlister que enumera as DLLs em um sistema executa no Windows 95 ou Windows 98, Windows NT 4.0 e Windows 2000. Os utilitários de exibição foram desenvolvidos no Windows NT 4.0 e no Windows 2000 e requerem o Microsoft Access ou o Microsoft SQL Server. Ele foi testado com Microsoft Access 97 e versões posteriores e SQL Server 6.5 e versões posteriores.

Causa

Dentro de um aplicativo que usa Stdio.h, Ios.h ou Streamb.h (incluindo Afxwin.h), o EOF já foi definida como uma constante (-1). O # Import, em seguida, tenta definir a propriedade EOF para Recordset do ADO ou RDO é Resultset objetos e gera os erros C2629/C2238 na seguinte linha de código gerado no msado15.tlh (ou msado10.tlh) se for usado ADO 1.0 arquivo:
VARIANT_BOOL EOF;
				
esta linha está tentando definir uma variável, mas EOF já o definido como -1. Como resultado, esta linha de código analisa a:
short -1;
				
isto não compila porque-1 não é um nome de variável válido.

Resolução

Para corrigir isso, você pode usar o atributo de renomeação do # Import da seguinte maneira:
   #import <msado15.dll>
    rename( "EOF", "A_EOF" )
				
Rename altera o nome de qualquer seqüência de caracteres "EOF" que # Import localiza o typelib especificado para um novo valor.

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

Situação

Esse comportamento é por design.

Mais Informações

O seguinte arquivo está disponível para download no Centro de download da Microsoft:

DUPS.exe
Data de lançamento: 14/janeiro-2000

Para obter informações adicionais sobre como baixar arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
119591Como obter arquivos de suporte da Microsoft a partir de serviços online
Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo. Este artigo e seu código que acompanha serão atualizadas periodicamente. Todos os comentários são bem-vindas e serão considerados em atualizações futuras. (Use hotlink envio no quadro da direita para comentários.)
Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita, incluindo, mas não se limitando às garantias implícitas de comercialização e/ou adequação a uma finalidade específica. Este artigo presume que você esteja familiarizado com a linguagem de programação demonstrada e as ferramentas usadas para criar e depurar procedimentos. Profissionais de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades específicas.
Se você não tenha muita experiência de programação, talvez queira em contato com um Microsoft Certified Partner ou Microsoft Advisory Services. Para obter mais informações, visite da Microsoft:

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

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

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

Se você apenas deseja comparar as DLLs um aplicativo está usando em dois computadores (computador A e computador B), execute o programa Dlister.exe. Por padrão Dlister cria um arquivo no diretório C:\ com o nome Comp_DLL.txt onde comp é o nome do computador que executa Dlister. Você também pode especificar que Dlister gravar em um banco de dados, ou você pode especificar outro diretório na qual o arquivo deve ser criado.

Há duas maneiras para substituir padrões de atributo Dlisters. Os visualizadores do Visual Basic e Dlister obtenham essa chave do Registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell
E os seguintes valores:
ConnectionString, fileTableDir
Você pode usar o miniaplicativo do Visual Basic DllHell\C_clients\ATL4VB\VbregSetup para definir esses valores ou você pode simplesmente executar Dlister e cria valores padrão. Por exemplo, definindo o ConnectString:
Provider=SQLOLEDB.1;Initial Catalog=dllHell;Data Source=dsc3_ts;
					
faz com que Dlister gravar valores para o SQL Server dllHell banco de dados, enquanto:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dllHell.mdb
					
usa um banco de dados local do Microsoft Access.

A segunda maneira para substituir valores padrão está definindo os atributos no arquivo DllHell.ini no diretório Dlister.exe. Esses arquivos são descompactados no diretório DllHell\C_clients\Dlister\Release\.

Um arquivo chamado xdllHell.ini está incluído no exemplo com uma seqüência de conexão que você pode modificar. (Renomeie este dllHell.ini se você desejar usá-lo.)

Se computador A e computador B ambos têm ActiveX Data Objects (ADO) instalado, a abordagem mais simples para preencher o banco de dados dllHell é definir a seqüência de conexão para o banco de dados Jet ou SQL Server. Como alternativa, você pode executar Dlister no modo de arquivo de texto, use o utilitário de C++ DllHell\C_clients\Dlister\readtxttbl\Release\DlgDtxt2DB.exe para ler o arquivo de texto de saída para o banco de dados DllHell. O aplicativo MFC ReadTxtTbl também é útil para leitura no texto que os dados de clientes de email você. Você deve registrar os servidores COM DUPS\C_clients\ATL4VB\r1RegMon\ReleaseMinDependency\r1RegMon.dll e DUPS\C_clients\ATL4VB\readDlls\R1readTxtMod\ReleaseMinDependency\R1readTxtMod.dll para usar os visualizadores do Visual Basic.

Você pode habilitar somas de verificação CRC, definindo a chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell ComputeCRC como 0 x 1 em sistemas que executam o Windows 2000. Depois que você navegar para essa chave, você pode adicioná-lo aos seus favoritos. Os usuários do Windows NT 4 devem navegar manualmente a essa chave.

Criando o banco de dados DllHell

SQL Server 7.0 é recomendado, mas o Microsoft Access 2000 também funciona. Para criar o banco de dados DLLhell você pode usar o SQL Server Enterprise Manager para criar um banco de dados vazio denominado DLLhell. Do SQL Server Query Analyzer janela, selecione DLLhell caixa de listagem suspensa banco de dados. Execute o script DllHell\SQL\dllHellSchema.sql nesta janela e cria todas as tabelas necessárias para Dllhell.

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

Comparando as DLLs em dois sistemas

Para comparar todas as DLLs em dois sistemas use cmpWithList utilitário do Visual Basic no diretório Dllhell\VBviewers\VBcmpList2.

Para limitar as comparações DLL (geralmente para somente as DLLs carrega um aplicativo de destino) você também deve ter um arquivo de texto (.txt) que contém as DLLs que você deseja comparar. Você pode criar esta lista com Depends ou uma das várias ferramentas (como ListDLLs e Process Explorer) o seguinte site:
http://technet.microsoft.com/en-us/sysinternals/default.aspx

Usando cmpWithList

Quando é iniciado cmpWithList ele mostra uma lista de computadores no banco de dados DLLhell na caixa de listagem computadores. Por padrão, os primeiros dois computadores na lista são selecionados para comparação. Para alterar o computador de destino, selecione-o na caixa de listagem e, em seguida, selecione o botão Alterar . O Comp1 e Comp2 editar caixas mostrar quais computadores você irá comparar.

Use o controle de navegação de diretório para selecionar o arquivo de texto que irá conter os nomes de todas as DLLs que deseja comparar nos dois sistemas. Clicando duas vezes no arquivo de texto seleciona-lo.

Se você não quiser comparar DLLs em alguns diretórios (geralmente não faz sobre DLLs em winnt\system32\dllcache e WINNT\ $ NtServicePackUninstall $) clique duas vezes na linha na grade. Você será solicitado a adicionar o diretório para a tabela _skipDir. DLLs no _skipDir não são consideradas para comparação.

Instalar rede automática DLL auditoria

Configurar no agendamento nos sistemas Windows 2000:

Iniciar com o arquivo de comando dllHell\rcomp.cmd. Altere as seguintes variáveis de ambiente para refletir seu sistema:
  1. Dpath: O diretório no cliente onde Dlister cria a lista de arquivo de texto de dlls no cliente. O padrão é C:\temp\DLLhell\
  2. COMP.: O nome do computador cliente.
  3. ChangeFileLocation: O caminho completo da rede onde a DLL diferenças arquivo deve ser copiado. Esse é o diretório que o HellsMonitor watches de serviço.
  4. ServerLst: O caminho de rede onde o diretório C_clients do pacote DLLhell está localizado.
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 .

Ative o miniaplicativo Adicionar tarefa agendada . Vá para a pasta local que contém o arquivo rcomp.cmd e selecioná-lo. Depois de selecionar as opções que o Assistente apresenta, o arquivo rcomp.cmd é adicionado à trabalhos agendados. A primeira vez que você configurar o trabalho agendado, selecione a hora de início 2 a 5 minutos no futuro para que você possa testar suas configurações. Geralmente é conveniente descomente o comando pause para que você possa ver quaisquer erros que ocorram.

Registrar o arquivo de serviço de monitoramento

Do Dllhell\C_clients\HellsMonitor\ReleaseUMinDependency executar este comando, que registra o serviço de diretório:
HellsMonitor /Service
				
a parte mais importante é o cliente monitor. Esta é uma interface GRÁFICA que permite que você adicionar ou remover os diretórios para monitorar. Ele também permite que você especificar o aplicativo seja executado (com um botão Procurar útil). Para DUPS sistema de monitoramento, o aplicativo é Dllhell\C_clients\Dlister\ReadTxtTblCmdLine\Debug\ReadTxtTblCmdLine.exe.

Para adicionar um diretório para monitorar, clique em Adicionar . Este abre uma caixa de diálogo de procura diretório onde você pode procurar o diretório você deseja monitorar. Para remover uma pasta ou pastas, selecione os diretórios que você deseja remover e, em seguida, clique em Remover . Para especificar o aplicativo para executar qualquer tipo-lo ou procurar a ele. Se você não especificar um caminho que ele deve ser no caminho do sistema em algum lugar. Em seguida, clique em o Definir para configurar o monitor para executar esse aplicativo quando uma alteração for detectado.

Observação : O botão do conjunto é habilitado apenas quando você altera o aplicativo para executar a partir o que ele está definido. O botão Remover é habilitado apenas quando você tiver selecionadas para remover de pastas.

Referências

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

Propriedades

ID do artigo: 166112 - Última revisão: sábado, 22 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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