MingW32-64处理Unicode窗口DLL



我有一个关于QT5和MingW32-64的问题。我得到了一个API DLL,它是用MSVC编译的。这个DLL附带了一个库,就像在Windows上一样。现在用QT5/MSVC单词完美编译应用程序。但是我们的编译器是MingW32-64。一直以来,我试图发送一个字符串到API DLL,我得到了一个错误。错误并不是很清楚,它说";错误的参数";

然而,这是代码:

QString strSavePath = QDir::toNativeSeparators(fileNames.at(0));
#if defined (WIN32)
QString rootPath = "\";
#else
QString rootPath = "/";
#endif
SFileToAdd file;
file.lpszFileName = nullptr;
//Attention, this differ on MAC And Win32
const TCHAR *pSavePath = convertToFoxValue(strSavePath);
const TCHAR *pRootPath = convertToFoxValue(rootPath);
file.lpszSourceFilePath = pSavePath;
file.lpszDestinationPath = pRootPath;

file.bVideoFile = BS_FALSE;
if(ui->usePath->isChecked()==false){
file.nSavePath = BS_DONT_SAVE_PATH;
}else{
file.nSavePath = BS_WHOLE_PATH;
}

int32 res = ::AddFile(file);
if(res!=0){
QMessageBox::information(this, tr("Information"),
tr("Error in AddFile"));
}
delete [] pSavePath;
delete [] pRootPath;

转换功能为:

const TCHAR* convertToFoxValue(const QString& strValue)
{
#if defined (WIN32)
TCHAR *someVar=new TCHAR[strValue.size()+1];
strValue.toWCharArray(someVar);
//set last caharacter to null terminator
someVar[strValue.size()]=L'';
return reinterpret_cast<const TCHAR *>(someVar);
#else
TCHAR *someVar=new TCHAR[strValue.size()+1];
QByteArray pass = strValue.toUtf8();
strcpy(someVar,pass.data());
return reinterpret_cast<const TCHAR *>(someVar);
#endif
}

提交像这样的硬链接

file.lpszSourceFilePath = L"D:\datapart.pdf";
file.lpszDestinationPath = L"\";

也不起作用。所以我完全弄糊涂了。所有内容都使用_UNICODE标志进行编译。MinGW和空终止的宽字符串有问题吗?还是MingW通常使用UNCIDOE设置?

调用用另一个编译器编译的库不是一个好主意,尤其是在C++中。如果你想使用MinGW-w64中的Qt,那么最好使用相同编译器的Qt构建。

适用于所有有相同问题的人。使用MSVC检查有关定义的头文件对我来说是

#ifdef _MSC_VER
#pragma pack(push, 1) 
#endif

我已将其更改为

//#ifdef _MSC_VER
//No padding
#ifdef WIN32
#pragma pack(push, 1) 
#endif

所以MingW现在也知道了结构填充,它现在工作得很好。没有关于C/C++DLL之类的东西。

相关内容

  • 没有找到相关文章

最新更新