MFC DLL 中导入ADO库时编译出错的解决方法

       在一个MFC DLL 工程中,导入ADO库时编译出错,提示重定义

       #import   "c:\program   files\common   files\system\ado\msado15.dll"    no_namespace    rename   ("EOF",   "adoEOF"),   rename("BOF","adoBOF")  


问题:       
      编译后,出现以下错误:   
msado15.tlh(169)   :   error   C2011:   'LockTypeEnum'   :   'enum'   type   redefinition  
msado15.tlh(212)   :   error   C2011:   'DataTypeEnum'   :   'enum'   type   redefinition  
msado15.tlh(256)   :   error   C2011:   'FieldAttributeEnum'   :   'enum'   type   redefinition  
msado15.tlh(277)   :   error   C2011:   'EditModeEnum'   :   'enum'   type   redefinition  
msado15.tlh(285)   :   error   C2011:   'RecordStatusEnum'   :   'enum'   type   redefinition   
msado15.tlh(405)   :   warning   C4146:   unary   minus   operator   applied   to   unsigned   type,   result   still   unsigned  
msado15.tlh(527)   :   error   C2011:   'ParameterDirectionEnum'   :   'enum'   type   redefinition  

……

原因:

      是因为我们建立MFC DLL 工程时,VC在stdafx.h中包含了如下两个操作数据库的类的头文件
     include   <afxdb.h>           //   MFC   database   classes 
     include   <afxdao.h>         //   MFC   DAO   database

     与ADO库中的类型定义冲突。

 

解决方法:

  1、若没有用到上述两个头文件中的类,则去掉stdafx.h中下面所示的两行代码。   
       #include   <afxdb.h>        //   MFC   database   classes   
       #include   <afxdao.h>      //   MFC   DAO   database

  2、导入库时不去掉命名空间,即不加no_namespace  。导入语句改为
        #import   "C:\Program   Files\Common   Files\System\ADO\msado15.dll"     rename("EOF","adoEOF"),   rename("BOF","adoBOF")          
        using   namespace   ADODB; //在用到ADO类的头文件中添加此语句

  3、用rename修改所有重定义的类型名称.
          rename("LockTypeEnum","adoLockTypeEnum")
          rename("DataTypeEnum","adoDataTypeEnum")
          ……

 

 

posted @ 2008-12-06 22:50  天下无霜  阅读(1722)  评论(0编辑  收藏  举报