MFC访问ACCESS2003出现不可识别数据库的问题(static dll和shared dll)
这里不想讲静态链接和动态链接有什么区别,这个我觉得每个学计算机的人都应该知道,就跟常识一样。
为什么突然想到来写这个问题呢,主要是刚碰到一个问题,用CDaoRecordset访问ACCESS 2003 的数据库时候出现了“不可识别的数据库”问题,问题出在MFC DLL上,如果你需要访问Access 2003的数据库,你可以非常简单的在 CYourApp::InitInstance() 中加入 AfxGetModuleState()->m_dwVersion = 0x0601; 这句,这样就可以访问了,但这种情况只适用于shared dll,因为这种方法实际上是在运行时动态改变DLL版本,所以当你的工程是采用static dll 时,这个方法就不对了,解决办法是:( VCPATH/ 代表VC安装目录下的VC98目录)
1。找到VCPATH/MFC/SRC下的Daocore.cpp,在
// Determine whether to use DAO 3.6, 3.5, or 3.0
// Use DAO 3.0 if DLL build and not built with MFC 4.21 or later
// Use DAO 3.6 if MFC 6.01 or later
// otherwise, DAO 3.5
这之后加入:
#undef _MFC_VER
#define _MFC_VER 0x0601
保存退出。
2。运行VCPATH/Bin下的VCVARS32.BAT。
3。在命令行中,cd到VCPATH/MFC/SRC目录,使用命令:
nmake DEBUG=1 或者
release版本:nmake DEBUG=0 或者
unicode支持:
nmake DEBUG=1 UNICODE=1 或者
nmake DEBUG=0 UNICODE=1
重新编译DLL文件,使用这种方法将会覆盖VCPATH/MFC/Lib下的文件,所以最好先做个备份。
Jan07