C++ struct结构体定义构造函数和析构函数,构造函数参数从VS2017平台转换到Qt5平台下构建出错,采用字符集转换函数将string类型转换为wstring,构建仍然出错!

调试win硬件驱动,需要利用VS编译的win驱动构建自己的Qt5GUI程序:

其中部分win驱动源码如下

device_file::device_file(const std::string& path, DWORD accessFlags) {

h = CreateFile(path.c_str(), accessFlags, 0, NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL, NULL);

}

调用winAPI CreateFile函数在win中字符编码是两个字节,但在Qt5中UTF_8是一个字节,构建出错,错误信息如下:

error: C2664:

“HANDLE CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE)”:

无法将参数 1 从“const _Elem *”转换为“LPCWSTR”

with [ _Elem=char]

与指向的类型无关;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换。

采用方法参考:https://www.cnblogs.com/lxt287994374/archive/2013/06/13/3133389.html

将第一个参数采用调用函数方法转换为wstring类型,构建结果出错,错误信息:

error: C2664: “std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)”: 无法将参数 1 从“WCHAR [1]”转换为“std::initializer_list<_Elem>”with]

2019年3月19日

2019年3月20 日

寻找朋友帮助后发现是源码问题,一是容器,而是编译环境;

1 容器方面--错误原因:构造空的vector时是不调用对象的构造函数

std::vector<std::string> device_paths;

//

// for (unsigned index = 0;

// SetupDiEnumDeviceInterfaces(device_info, NULL, &guid, index, &device_interface);

2 编译环境--错误原因:

VS2017编译win驱动,Qt调用win驱动会出点问题。

--------------------------------------------------------------------------------------------------------------

将多字节宽字符问题在VS上解决后,Qt5构建出错:

LNK2005:main已经在main.obj中定义:未找到文件:xdma_test.obj

LNK1169:找不到一个或多个重定义的符号

这里待解决。。。。继续更新。。。。

技术提升的道路永无止境在Qt中

针对LNK2005:main已经在main.obj中定义:未找到文件:xdma_test.obj问题,LNK1169:找不到一个或多个重定义的符号。

在Qt5中查找main发现mainwindow.h和xxxx.cpp均有main定义更换xxxx.cpp中的main名称即可通过编译。

---------------------------------------------------------------------------------------------------------------