Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用植物学C++;在QT中加密文件_C++_Qt_Encryption_Botan - Fatal编程技术网

C++ 使用植物学C++;在QT中加密文件

C++ 使用植物学C++;在QT中加密文件,c++,qt,encryption,botan,C++,Qt,Encryption,Botan,我正在Windows 10上使用Qt Creator 4.6.1 基于Qt 5.10.1(MSVC 2015,32位) 建于2018年5月2日04:24:33 qmakewithmingw491\u 32 有一个来自web的项目,它使用了带有includeBotan.pri的botanwrapper 完整的代码很长,所以不可能在这里发布,但它可以作为zip文件在 所有这些都可以工作并对文件进行加密,但当我将这些文件带到我的项目中时,我会遇到大量编译错误,如下面的错误 botan.h:9380:

我正在Windows 10上使用Qt Creator 4.6.1
基于Qt 5.10.1(MSVC 2015,32位)
建于2018年5月2日04:24:33
qmake
with
mingw491\u 32

有一个来自web的项目,它使用了带有include
Botan.pri的
botanwrapper

完整的代码很长,所以不可能在这里发布,但它可以作为zip文件在

所有这些都可以工作并对文件进行加密,但当我将这些文件带到我的项目中时,我会遇到大量编译错误,如下面的错误

botan.h:9380: error: expected identifier before '(' token
          X942_DH_PARAMETERS = ANSI_X9_42,
          ^
错误:应在“(”标记前面加“}”,该标记指向行

enum Format {
         ANSI_X9_42,
         ANSI_X9_57,
         PKCS_3,

         DSA_PARAMETERS = ANSI_X9_57,
         DH_PARAMETERS = ANSI_X9_42,
         X942_DH_PARAMETERS = ANSI_X9_42, // Error points to here
         PKCS3_DH_PARAMETERS = PKCS_3
      };
还有许多与
常量相关的错误,例如

error: non-member function 'bool Botan::verify_group(Botan::RandomNumberGenerator&, bool)' cannot have cv-qualifier

bool verify_group(RandomNumberGenerator& rng, bool strong) const;  
它指向下面的代码


我已经检查了.pro文件中的includes,我的文件设置与在同一设置上编译和运行的项目相同。我的
botan.pri
文件中包含了相同的

win32 {
    DEFINES += BOTAN_TARGET_OS_IS_WINDOWS \
        BOTAN_TARGET_OS_HAS_LOADLIBRARY BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME \
        BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE \
        BOTAN_HAS_DYNAMIC_LOADER BOTAN_HAS_ENTROPY_SRC_CAPI BOTAN_HAS_ENTROPY_SRC_WIN32 \
        BOTAN_HAS_MUTEX_WIN32

    win32-msvc* {
        QMAKE_CXXFLAGS += -wd4251 -wd4290 -wd4250
        DEFINES += BOTAN_BUILD_COMPILER_IS_MSVC BOTAN_TARGET_OS_HAS_GMTIME_S
    } else {
        QMAKE_CFLAGS += -fpermissive -finline-functions -Wno-long-long
        QMAKE_CXXFLAGS += -fpermissive -finline-functions -Wno-long-long
    }
    LIBS += -ladvapi32 -luser32
}

我已经读到,删除
常量将删除一个或多个错误,但我不明白为什么在愉快地编译
botan.h
并运行构建和加密文件的同一个设置上会出现这种情况。有人能帮我解决这个问题吗?感谢帮助。提前感谢。

问题是Windows-API定义了一个与此枚举冲突的宏
X942_DH_PARAMETERS
。(事实上,为了避免此问题,在Botan的后续版本中重命名了该枚举)


在包含Botan头文件之前,您可以通过使用
#undef X942_DH_参数
来解决这个问题。

杰克对此表示感谢,我真的很感激,因为我对它感到厌倦。现在我有一个奇怪的
错误:未定义对
BotanWrapper::DecryptFileW(QString,QString)的引用`全局搜索甚至没有显示整个QT项目中的任何地方?无论如何-再次感谢!抱歉,我对QT包装器一无所知,但有一点需要注意的是
DecryptFileW
是一个Windows API,可能Windows header正在做类似
#define DecryptFile DecryptFileW
,所以
#取消DecryptFile
可以。再次感谢Jack。我在Qt论坛上询问过,但没有回复,所以我在这里发回了您的解决方案。我刚刚在winbase中跟踪到了DecryptFile定义。h所以我将BotangWrapper重命名为DecryptFileW,这很有效。我不知道最初的FileW后缀来自何处,但老实说,我已经迷失了方向。我需要考虑在github上发布一个冲突bug作为包装器。如果我能在这里奖励喜欢/明星/信用,我会按你的方式给你一个包。
win32 {
    DEFINES += BOTAN_TARGET_OS_IS_WINDOWS \
        BOTAN_TARGET_OS_HAS_LOADLIBRARY BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME \
        BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE \
        BOTAN_HAS_DYNAMIC_LOADER BOTAN_HAS_ENTROPY_SRC_CAPI BOTAN_HAS_ENTROPY_SRC_WIN32 \
        BOTAN_HAS_MUTEX_WIN32

    win32-msvc* {
        QMAKE_CXXFLAGS += -wd4251 -wd4290 -wd4250
        DEFINES += BOTAN_BUILD_COMPILER_IS_MSVC BOTAN_TARGET_OS_HAS_GMTIME_S
    } else {
        QMAKE_CFLAGS += -fpermissive -finline-functions -Wno-long-long
        QMAKE_CXXFLAGS += -fpermissive -finline-functions -Wno-long-long
    }
    LIBS += -ladvapi32 -luser32
}