我在一个比较简单的使用多字节字符集的工程里,只有一个.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>
#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>
解决方案 »
- GetDlgItemInt获取编辑框里面的内容。
- 伤心贴,到新公司,以前积累的大量SDK MFC控件框架淘汰了,必须ATL/WTL了
- 在线程的回调函数里调用对话框里的CEdit控件。
- 请问关于在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL的编程的问题!
- 多网卡如何配置?
- 加急~~中断有关,有重谢!!
- 关于屏幕取词的问题
- 在vc中怎样设置一个全局变量???
- socks5在于SOCKS代理服务器建立socket连接之后,发出request请求时,返回rep为2!
- 要在两个地方用#include<****.h>时怎么办?
- 关于CString的散分问题
- 新手求助 listbox 内容不显示的问题
在第一个工程里面,比较简单,就include fastdb.h,而第二个工程在引入fastdb.h之前就引入了windows.h, 这个时候UNICODE没有定义,因此CreateEvent被解释为CreateEventA。当我引入fastdb.h的时候,定义了UNICODE,所以char_t 被解释为 char,而这个时候,因为windows.h已经在前面引入了,所以即使fastdb.h需要windows.h,windows.不会再次引入。于是报错!