const wchar_t *和const char *之间的转换,不允许使用qt

时间:2016-10-20 21:19:33

标签: c++ qt wchar-t

我正在尝试将库simplexlsxwriter与Qt一起使用,但是当我尝试编译时,我在代码中的几个地方遇到了以下错误:

“无法将'const TCHAR * {aka const wchar_t *}'转换为'const char *'以将参数'1'转换为'size_t strlen(const char *)'”

有问题的一行是:

bool HasZipSuffix(const TCHAR *fn) { 
    const TCHAR *ext = fn+_tcslen(fn);
}

为了消除错误,我尝试了以下内容:

bool HasZipSuffix(const TCHAR *fn) { 
    const char* fn_cc = reinterpret_cast<const char*> (fn);
    const TCHAR *ext = fn+_tcslen(fn_cc );
}

它有效,但它在编译期间引入了很多错误(大约3720个问题)。我在Qt。

下使用mingw53_32

这很奇怪,因为我创建一个简单的Makefile如下:

ROOT_DIR := ./

CXXFLAGS=-MMD -MP -Wall
CXXFLAGS+= -I$(ROOT_DIR)

src = Zip/zip.cpp \
    Xlsx/Chartsheet.cpp \
    Xlsx/Workbook.cpp \
    Xlsx/Worksheet.cpp \
    Xlsx/XlsxHeaders.cpp \
    main.cpp 

includes = Zip/zip.h \
    tchar.h \
    Xlsx/Chartsheet.h \
    Xlsx/SimpleXlsxDef.h \
    Xlsx/Workbook.h \
    Xlsx/Worksheet.h \
    Xlsx/XlsxHeaders.h

object=$(src:.cpp=.o)

%: %.o
    $(LINK.cpp) -o $@ $^ $(LDFLAGS)

main: $(object)

-include $(src:.cpp=.d)

编译遇到绝对没有困难,我获得了所需的二进制文件。所以我的问题是,为什么使用Qt从const wchar_t *转换为const char *在使用“raw”mingw编译器时抛出错误,它不会抛出任何错误?

1 个答案:

答案 0 :(得分:-1)

添加

DEFINES -= UNICODE 

.pro 文件。 qmake 默认定义-DUNICODE,与 win32 库冲突。