MingW32-64 句柄 Unicode Window DLL

MingW32-64 handle Unicode Window DLLs

我有一个关于QT5和MingW32-64的问题。我得到了一个用 MSVC 编译的 API DLL。这个 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'[=12=]';
    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 或其他什么都没有。