0

我现在有点卡住了一个小示例项目,我想运行它来测试我想在主项目中使用的一些密码学。

基本上我使用的是最新的 Qt Creator,并且创建了一个简单的窗口对话框。此外,我想通过CkCrypt2测试 PBKDF2 的实现

所以我所做的是下载库的 X64 版本并将其添加到我的项目文件夹中。然后我告诉我的 Qt 项目使用外部库,最终的 .pro 文件如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2013-06-09T18:09:44
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = crypt2test
TEMPLATE = app


SOURCES += main.cpp\
        m

ainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libs/ -lChilkatDbgDll_x64
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libs/ -lChilkatDbgDll_x64d
else:unix: LIBS += -L$$PWD/libs/ -lChilkatDbgDll_x64

INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

我可以成功加载库,但无法启动应用程序。

我的 mainwindow.cpp 看起来像这样:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "CkCrypt2.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    CkCrypt2 crypt;

    bool success;
    success = crypt.UnlockComponent("Just some random text ");

    if ( !success )
    {
        qDebug() << "Not successfully unlocking the library";
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

我在编译器中得到的错误信息是:

c:\qt\qt5.0.2\tools\qtcreator\bin\crypt2test\include\CkString.h:127: error: C2061: syntax error : identifier 'SYSTEMTIME'
c:\qt\qt5.0.2\tools\qtcreator\bin\crypt2test\include\CkString.h:129: error: C2061: syntax error : identifier 'SYSTEMTIME'
C:\Qt\Qt5.0.2\Tools\QtCreator\bin\crypt2test\include\CkCrypt2.h:429: error: C2061: syntax error : identifier 'SYSTEMTIME'

查看我看到的文件:

void appendDateRfc822(SYSTEMTIME &sysTime);

void appendDateRfc822Gmt(SYSTEMTIME &sysTime);

// GETSIGNATURESIGNINGTIME_BEGIN
bool GetSignatureSigningTime(int index, SYSTEMTIME &outSysTime);
// GETSIGNATURESIGNINGTIME_END

好的,所以它在抱怨 SYSTEMTIME 构造。所以我查找错误 C2061 基本上它说:

编译器发现了一个非预期的标识符。确保在使用之前声明了标识符。

这是有道理的,所以我查找了SYSTEMTIME并尝试这样做:

#include <windows.h>

但这会导致 windows.h 文件本身出现更多错误。

我在 Qt 中使用 MS Visual C++ 编译器。即使我使用 qmake。我对此很陌生,我还不完全理解。此外,我不知道如何解决这个问题,因为包括 windows.h 没有帮助。

这里似乎有什么问题?这是关于我的编译器的问题还是我使用第三方应用程序的问题,该库是用 MS Visual C++ 编译的,我现在正试图在 Qt 的 Windows 机器上使用 Windows Visual C++ 编译器?

对于任何帮助,我都非常感谢!

EDIT1: 实际上,在清理所有和 qmake 和构建项目之后,我现在有不同的错误,并且如前所述,在 Windows.h 中没有发现任何错误。由于有这么多,我做了一个截图:http: //i.imgur.com/B8EoENB.png

EDIT2: 我已经调整了我包含的库。在此之前,我在调试模式下使用 CkCrypt 的多线程库。我现在已经包含了单个 realease 库。它位于同一目录中。当包括 windows.h 时,我得到了事情已经定义的错误。所以我再次删除了该行。有了这个结果: http: //i.imgur.com/z415txR.png 这在底部显示 MSVCRT 与其他库发生冲突。它提到使用 NODEFAULTLIB:library 但我不知道该怎么做。在我处理过程中将谷歌搜索并保持最新状态。

4

1 回答 1

0

许多年前,Chilkat 最初只是为 Windows 平台开发的,因此使用了 SYSTEMTIME。在过去 5 年(大约)Chilkat 是跨平台的,而 SYSTEMTIME 不再有意义。为了解决这个问题,在与 CkCrypt2.h 头文件相同的目录中有一个“SystemTime.h”头文件。你可以包括这个来解决问题。(但是,如果定义了 WIN32,您可能需要编辑 SystemTime.h 以删除#ifdef。)

在任何情况下,使用 SYSTEMTIME 的方法都将被弃用。对于使用 SYSTEMTIME 的任何方法或属性,应该有一个更新的替代方法/属性来代替使用 CkDateTime。

最后,Chilkat 将使用 Qt 进行测试,以便在下一个版本中,(希望)开箱即用的 Qt 能够编译而没有任何缺陷。

于 2013-06-10T13:38:30.447 回答