我在一个比较简单的使用多字节字符集的工程里,只有一个.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>