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

Leave a Reply

You must be logged in to post a comment.