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++ でコンパイルされているサードパーティのアプリを使用していて、Windows Visual C++ コンパイラを使用して Qt の Windows マシンでこれを使用しようとしているということですか?

どんな助けでも私は感謝しています!

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 に答える