关于Visual 2005中MFC调用Berkeley DB的编译错误问题

 

关于Visual 2005中MFC调用Berkeley DB的编译错误问题
2008年04月28日 星期一 16:15

Berkeley DB如果直接嵌入MFC程序,会因为两个头文件重复定义数据类型而导致编译不能通过,一般错误提示如下:
1>d:/test/include/db.h(1402) : error C2143: syntax error : missing '}' before '('
1>d:/test/include/db.h(1402) : fatal error C1903: unable to recover from previous error(s); stopping compilation
1>TestDlg.cpp
1>d:/test/include/db.h(1402) : error C2143: syntax error : missing '}' before '('
1>d:/test/include/db.h(1402) : fatal error C1903: unable to recover from previous error(s); stopping compilation
VC 6中与之冲突定义的文件是oledb.h,一般mfc都要包含stdafx.h文件,因为BerkeleyDb使用的时候编译选项要去掉预编译选项,所以可以把这个文件的包含都去掉,当然若你明确使用OLE的包含文件,可以如下包含:
#define DBTYPE MS_DBTYPE
#include <oledb.h>
#undef DBTYPE
但是Visual 2005默认两个包含文件中都引入了Dbtype的定义,还在ocdb.h中对DB_UNKNOWN定义,更加麻烦,如果要去掉包含文件,就得注释掉
#include <afxdisp.h>  
#include <afxdtctl.h>
两个文件,由于不包含afxdtctl.h文件,AfxEnableControlContainer就也的注释掉,如果这样也就不能使用OLE控件容器
好多网友发信给我,有啥更好的方法,事实上这个问题很简单,就像以前vxwork虚拟机运行上一样,只不过用berkeley db的人很少,很少有这方面的资料,也少有人专研,我琢磨了一下午,给个下面的方案,不影响ole的使用,只不过把ole定义的DBTYPE定义成其他名称
在stdafx.h文件末尾加上这几句就可以
#ifdef    DB_UNKNOWN
#undef DB_UNKNOWN
#endif
#define DBTYPE MS_DBTYPE

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值