读书人

#define UNICODE #undef UNICODE的有关

发布时间: 2012-01-22 22:38:43 作者: rapoo

#define UNICODE #undef UNICODE的问题 fastdb数据库
我在一个比较简单的使用多字节字符集的工程里,只有一个.cpp文件,在cpp里我引用了fastdb静态库,我想使用UNICODE,于是这样写:
#define UNICODE
#include "fastdb.h"
#undef UNICODE

#pragma comment(lib, "fastdbmddu.lib")

然后就使用fastdb的函数。一切没有问题。

在另外一个比较复杂的工程,也是使用多字节字符集,我也这样引入fastdb,但是报错了。
fastdb\sync_w32.h(234) : error C2664: 'CreateEventA' : cannot convert parameter 4 from 'const char_t *' to 'LPCSTR'
bool open(char_t const* name, bool signaled = false) {
e = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, true, signaled, name);

估计是因为我的工程使用多字节字符集,所以CreateEvent被解释为CreateEventA,因此最后一个参数必须为LPCSTR,而又因为我在引入fastdb的时候定义了UNICODE,于是char_t 被解释为 char, 因此出错。

我不明白的地方是,为什么我在上面那个简单的工程这样做不会出现问题,而在下面那个工程就出现问题了!
第二个工程的stdafx.h如下:

#pragma once

// Change these values to use different versions
#define WINVER0x0500
#define _WIN32_WINNT0x0501
#define _WIN32_IE0x0501
#define _RICHEDIT_VER0x0200

#pragma warning(disable: 4996)

#include <atlbase.h>
#include <atlapp.h>

#pragma warning(default: 4996)

extern CAppModule _Module;

#include <atlwin.h>
#include <atlframe.h>
#include <atlctrls.h>
#include <atldlgs.h>
#include <atlmisc.h>
#include <atlcrack.h>
#include <atltime.h>
#include <atlddx.h>

#include <comdef.h>
#pragma comment(lib, "comsupp.lib")

#include <map>
#include <vector>
#include <stack>


[解决办法]
呵呵,挺好。
[解决办法]
jf

读书人网 >VC/MFC

热点推荐