2013-06-09 3 views
0

현재 주요 프로젝트에서 사용하고 싶은 일부 암호를 테스트하기 위해 실행하고 싶은 약간의 샘플 프로젝트로 인해 잠시 멈춰 있습니다.Qt의 SYSTEMTIME

기본적으로 최신 Qt Creator를 사용하고 있으며 간단한 창 대화 상자를 만들었습니다. 또한 PBKDF2 구현을 테스트하고 싶습니다. CkCrypt2

그래서 라이브러리의 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 구조에 대해 불평하고 있습니다. 그래서 나는 error C2061 를 찾아 기본적으로는 말한다 :

컴파일러가 예상되지 않은 식별자를 발견했다. 사용하기 전에 식별자가 선언 된 인지 확인하십시오.

#include <windows.h> 

을하지만이 WINDOWS.H 파일 자체에 더 많은 오류에 이르게 : 나는 SYSTEMTIME을보고 수행하려고, 그래서 의미가

.

Qt에서 MS Visual C++ 컴파일러를 사용합니다. qmake를 사용하더라도. 나는 이것에 아주 새롭고 아직 나는 그것을 전부 이해하지 못한다. 또한 windows.h를 포함하면 도움이되지 않기 때문에이 문제를 해결하는 방법을 모릅니다.

여기에 무슨 문제가있는 것 같습니까? 이 문제는 내 컴파일러 또는 Microsoft Visual C++로 컴파일 된 타사 응용 프로그램을 사용하는 구성으로 인해 발생하며 Windows Visual C++ 컴파일러가 포함 된 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를 사용하는 것을 언급하지만 어떻게해야하는지 잘 모르겠습니다. Google은 처리하면서 최신 상태로 유지합니다.

+0

"windows.h 파일 자체에 많은 오류가 있습니다"- 오류 메시지를 게시하십시오. –

+0

@Riateche 표시 오류 스크린 샷과 함께 질문을 수정했습니다. 내 문제에 관심을 가져 주셔서 감사합니다. – Richard

+0

Hello World 프로젝트를 컴파일 할 수 있습니까? 모든 라이브러리가 동일한 컴파일러로 빌드되어 있습니까? –

답변

0

Chilkat은 원래 Windows 플랫폼 용으로 개발되었으며 SYSTEMTIME을 사용했습니다. 지난 5 년 (약)에 Chilkat은 크로스 플랫폼이며 SYSTEMTIME은 더 이상 적합하지 않습니다. 이 문제를 해결하기 위해 CkCrypt2.h 헤더 파일과 동일한 디렉터리에 "SystemTime.h"헤더가 있습니다. 이 문제를 해결하기 위해 이것을 포함시킬 수 있습니다. (그러나 WIN32가 정의되어 있으면 #ifdef를 제거하기 위해 SystemTime.h를 편집해야 할 것입니다.)

어떤 경우이든 SYSTEMTIME을 사용하는 메소드는 더 이상 사용되지 않습니다. SYSTEMTIME을 사용하는 모든 메서드 나 속성에 대해 CkDateTime 대신 대신 사용되는 새로운 대체 메서드/속성이 있어야합니다.

마지막으로, Chilkat은 Qt로 테스트 할 것이므로 다음 버전에서는 (당연히) Qt가 즉시 사용하는 상자가 함정없이 컴파일 될 것입니다.