#define unicode

场景:#define UNICODE #undef UNICODE的有关问题 fastdb数据库

#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 WINVER 0x0500
#define _WIN32_WINNT 0x0501
#define _WIN32_IE 0x0501
#define _RICHEDIT_VER 0x0200

#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