使用 ADO 与 EOF 时使用 # import PRB: 发生冲突

文章翻译 文章翻译
文章编号: 166112 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

症状

使用 # import,就可能生成封装数据库 API 的如 ActiveX 数据对象 (ADO),窗口应用程序中的类型库的类。例如:
   // Excerpt from Stdafx.h
   #include <afxwin.h>           // MFC core and standard components.
   ...
   #import <msado15.dll>        //for ADO 1.0, import "msado10.dll"
 
				
时这样做可能会从 ADO 的 # import,Recordset.EOF 属性上收到以下错误:
错误 C2629: 意外短 (
错误 C2238: 前面有意外的标记;
DLL 通用问题规划求解工具 (DUPS.exe) 是一个包含记录在 2000 年一月中的所有实用程序的示例 Microsoft 开发人员网络 (MSDN) 新闻文章"的 DLL 灾难的结尾"请检查该 MSDN 阅读此文章之前的文章。

复本包是一组的实用程序,您可以使用跟踪和比较多台基于 Windows 的计算机上的 DLL 版本。最大数目受您 SQL Server 或 Microsoft Access 的安装。枚举系统上的 dll 的 Dlister 客户机在 Windows 95 或 Windows 98、 Windows NT 4.0 和 Windows 2000 上运行。查看实用程序开发的在 Windows NT 4.0 和 Windows 2000,并且需要 Microsoft Access 或 Microsoft SQL Server。它是 Microsoft Access 97 和更高版本和 SQL Server 6.5 及更高版本进行测试。

原因

在使用 Stdio.h、 Ios.h 或 Streamb.h (包括 Afxwin.h) 的应用 EOF 已定义为常量 (-1)。然后,在 # import 试图为 ADO 的 Recordset 或 RDO 定义 EOF 属性的结果集中的对象和 C2629/C2238 错误生成的代码在下一行生成 msado15.tlh (或 msado10.tlh) 中,如果使用 ADO 1.0,则文件:
VARIANT_BOOL EOF;
				
尝试此行定义一个变量,但是 EOF 已经有其定义为-1。如此一来将这行代码分析到:
short -1;
				
这不会编译因为-1 不是有效的变量名。

解决方案

若要更正此错误您使用 # import 的重命名属性,如下例所示:
   #import <msado15.dll>
    rename( "EOF", "A_EOF" )
				
重命名更改 # import 查找指定类型库中,为新值中的任何"EOF"字符串的名称。

另一个解决方法是导入 ADO 遵循之前取消定义 EOF:
#undef EOF
#import <msado15.dll> rename_namespace("ADO20")
				

状态

此行为是设计使然。

更多信息

以下文件是可从 Microsoft 下载中心下载:

DUPS.exe
发布日期: 一月-14-2000

有关如何下载 Microsoft 支持文件的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591如何从联机服务获得 Microsoft 支持文件
Microsoft 扫描此文件的病毒。Microsoft 使用该文件已过帐的日期上获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器,这有助于防止未经授权的情况下对其进行更改文件上。 这篇文章,并其伴随的代码将定期更新。欢迎和未来更新中将被视为所有注释。(使用提交 hotlink 在右边框架中的注释。
Microsoft 提供的编程示例只,用于说明不附带任何明示或暗示保证,其中包括但不是限于对适销性和/或针对特定用途的适用性的暗示的担保。本文假定您熟悉所演示的编程语言和工具用于创建和调试过程。Microsoft 支持专业人员可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您特定需要。
如果有限编程体验您可能需要联系 Microsoft 认证合作伙伴或 Microsoft 咨询服务。有关更多的信息请访问以下 Microsoft 网站:

Microsoft 认证合作伙伴-https://partner.microsoft.com/global/30000104

Microsoft 咨询服务-http://support.microsoft.com/gp/advisoryservice

有关可用的支持选项和有关如何与 Microsoft 联系的详细信息,请访问下面的 Microsoft 网站: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS可以在一台计算机上使用复本包,或用来在网络上跟踪每个 DLL 的 DLL 历史记录。在其上运行 Windows 95 到 Windows 2000,在其最简单的模式下有任何依赖项。复本包组成,三个 c + + 实用程序和几个 Visual Basic 查看器。

如果您只是想比较 dll 应用程序正在使用两台计算机上 (计算机 A 和计算机 B) 运行 Dlister.exe 程序。默认情况下 Dlister C:\ Comp_DLL.txt 其中复合是运行 Dlister 计算机的名称同名的目录中创建一个文件。您还可以指定该 Dlister 写入一个数据库,也可以指定在其中创建该文件的另一个目录。

有两种方法覆盖 Dlisters 属性默认设置。Dlister 和 Visual Basic 查看器获取此注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell
和以下值:
ConnectionString、 fileTableDir
您可以使用 Visual Basic 程序 DllHell\C_clients\ATL4VB\VbregSetup 设置这些值,或者您可以只需运行 Dlister,它会创建默认值。例如对于设置为在 ConnectString:
Provider=SQLOLEDB.1;Initial Catalog=dllHell;Data Source=dsc3_ts;
					
导致将值写入该 SQL Server Dlister dllHell 数据库时:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dllHell.mdb
					
使用本地的 Microsoft Access 数据库。

第二种方法可以重写默认值是通过在文件中 DllHell.ini Dlister.exe 目录是在设置该属性。这些文件是解压缩到 DllHell\C_clients\Dlister\Release\ 目录。

在示例中,您可以对其进行修改的连接字符串包含一个名为 xdllHell.ini 的文件。(此 dllHell.ini 如果重命名您要使用它)。

如果计算机 A 和计算机 B 这两个具有安装 ActiveX 数据对象 (ADO),填充 dllHell 数据库最简单的方法是设置 SQL Server 或 Jet 数据库连接字符串。或者,也可以在文本文件模式下运行 Dlister,然后使用 c + + 实用程序将输出文本文件读入 DllHell 数据库 DllHell\C_clients\Dlister\readtxttbl\Release\DlgDtxt2DB.exe。ReadTxtTbl MFC 应用程序还可用于读取数据的客户端电子邮件的文本中。您必须注册 COM 服务器 DUPS\C_clients\ATL4VB\r1RegMon\ReleaseMinDependency\r1RegMon.dll 和 DUPS\C_clients\ATL4VB\readDlls\R1readTxtMod\ReleaseMinDependency\R1readTxtMod.dll 使用 Visual Basic 查看器。

您可以通过设置为 0x1 运行 Windows 2000 的系统上的注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\KB Samples\r1dllHell ComputeCRC 启用 CRC 校验和。一旦您导航到此项,您可以将其添加到您的收藏夹中。Windows NT 4 用户必须手动导航到此项。

正在创建 DllHell 数据库

建议 SQL Server 7.0,但 Microsoft Access 2000 也有效。若要创建 DLLhell 数据库可以创建一个空的数据库,名为 DLLhell 使用 SQL Server 企业管理器。从 SQL Server 查询分析器选择 DLLhell 从数据库下拉下拉列表框的窗口。在此窗口中运行 DllHell\SQL\dllHellSchema.sql 脚本,它将创建所需的 Dllhell 的所有表。

或者,您可以在 SQL Server 查询分析器中运行以下命令:
EXEC sp_attach_single_file_db 'DLLhell', 'DllHell\SQL\dllHell_Data.MDF'
				
的代码创建数据库和所有表。

比较两个系统上 dll

若要比较两个系统上的所有 dll Dllhell\VBviewers\VBcmpList2 目录中都使用 cmpWithList Visual Basic 实用程序。

若要限制 DLL 比较 (通常以仅为那些 dll 加载目标应用程序) 还必须具有一个包含所要进行比较的 dll 的文本 (.txt) 文件。 您可以创建此列表与 Depends 或几个工具 (如 ListDLLs 和处理资源管理器中),从以下网站之一:
http://technet.microsoft.com/en-us/sysinternals/default.aspx

使用 cmpWithList

cmpWithList 启动时它 DLLhell 数据库中的计算机列表框中显示计算机的列表。默认状态下,选择列表中的前两个计算机进行比较。若要更改在目标计算机,请在列表框中选择它,然后选择 更改 按钮。Comp1 和 Comp2 编辑框显示您将比较哪台计算机。

使用目录导航控件选择文本文件将包含您要比较的两个系统的所有 dll 的名称。双击该文本文件选择它。

如果要在一些比较 dll 双击网格中的行上的目录 (通常您不在乎 dll 在 winnt\system32\dllcache 和 WINNT\ $ NtServicePackUninstall $)。系统将提示您将该目录添加到 _skipDir 表。在 _skipDir 中的 dll 不会被视为进行比较。

安装自动网络 DLL 审核

设置在 Windows 2000 系统上的日程安排:

dllHell\rcomp.cmd 命令文件的开头。更改下面的环境变量,以反映您的系统,请执行下列操作:
  1. Dpath: 其中 Dlister 文本文件列表的创建 dll 的客户端在客户端上的目录。默认值是 C:\temp\DLLhell\
  2. 复合: 客户端计算机的名称。
  3. ChangeFileLocation: 应复制该 DLL 的差异文件的完整网络路径。这是目录,该 HellsMonitor 服务监视项目。
  4. ServerLst: DLLhell 包的 C_clients 目录所在的网络路径。
任务栏上, 单击 开始 按钮,指向 程序、 指向 附件、 指向 系统工具,然后单击 计划任务

激活 添加任务计划 程序。浏览到包含 rcomp.cmd 文件的本地目录并将其选中。选择该向导将显示该选项后 rcomp.cmd 文件被添加到计划的作业。设置计划的作业的第一次选择开始时间 2-5 分钟以后,因此您可以测试您的设置。很方便地取消注释暂停命令,以便您可以看到出现的任何错误。

注册文件监视服务

从该 Dllhell\C_clients\HellsMonitor\ReleaseUMinDependency 目录运行此注册该服务的命令:
HellsMonitor /Service
				
最重要部分是监视客户端。这是一个 GUI,使您可以添加或删除要监视的目录。它还允许您指定应用程序运行 (使用一个方便地浏览按钮)。对于监视系统该复本,应用程序是 Dllhell\C_clients\Dlister\ReadTxtTblCmdLine\Debug\ReadTxtTblCmdLine.exe。

单击将监视的目录的 添加。您可以在其中浏览到该目录一个目录浏览对话框要监视此打开。若要删除一个目录,请选择您要删除,然后单击 删除 的目录。若要指定应用程序运行这两个类型中或浏览到它。如果不指定它必须位于系统路径位置的路径。接下来,单击设置时要运行该应用程序检测到更改监视器的 设置

: 当您更改该应用程序以从其当前设置下运行时的设置按钮才会启用。仅当您已选择要删除的目录时,才启用删除按钮。

参考

有关详细的信息,请参阅以下内容:
"The End of DLL Hell"

属性

文章编号: 166112 - 最后修改: 2014年2月22日 - 修订: 4.6
这篇文章中的信息适用于:
  • Microsoft ActiveX Data Objects 1.0?当用于
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 标准版
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 企业版
    • Microsoft Visual C++ 5.0 企业版
    • Microsoft Visual C++ 6.0 企业版
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 专业版
    • Microsoft Visual C++ 6.0 专业版
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.0?当用于
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 标准版
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 企业版
    • Microsoft Visual C++ 5.0 企业版
    • Microsoft Visual C++ 6.0 企业版
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 专业版
    • Microsoft Visual C++ 6.0 专业版
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.1?当用于
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 标准版
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 企业版
    • Microsoft Visual C++ 5.0 企业版
    • Microsoft Visual C++ 6.0 企业版
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 专业版
    • Microsoft Visual C++ 6.0 专业版
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.5?当用于
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 标准版
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 企业版
    • Microsoft Visual C++ 5.0 企业版
    • Microsoft Visual C++ 6.0 企业版
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 专业版
    • Microsoft Visual C++ 6.0 专业版
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Data Objects 2.6?当用于
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 标准版
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ 4.2 企业版
    • Microsoft Visual C++ 5.0 企业版
    • Microsoft Visual C++ 6.0 企业版
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 专业版
    • Microsoft Visual C++ 6.0 专业版
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Data Access Components 2.1 Service Pack 2
关键字:?
kbnosurvey kbarchive kbmt kbdownload kbdatabase kbprb kbprogramming KB166112 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 166112
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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