我是C++的新手,我真的很想使用Botan连接到硬件加密 token 。我不知道是否错过了libs或dlls的任何设置。

我基于Building Botan library in Windows 10构建了Botan库。构建后,将在lib文件夹中创建botan.libbotan.dll

然后,我使用以下简单代码在Visual Studio 2019中创建一个consoleApplication:

#include <iostream>
#include <botan/botan.h>

#include <botan/p11.h>
#include <botan/p11_slot.h>
#include <botan/p11_session.h>
#include <botan/p11_module.h>
#include <botan/p11_object.h>
#include <botan/p11_randomgenerator.h>

#include <botan/p11_x509.h>
#include <botan/x509_dn.h>

using namespace Botan;
using namespace PKCS11;

int main()
{
    Botan::PKCS11::Module module("C:\\Windows\\System32\\ShuttleCsp11_3003.dll");
    // Sometimes useful if a newly connected token is not detected by the PKCS#11 module
    module.reload();

    Botan::PKCS11::Info info = module.get_info();

    // print library version
    std::cout << std::to_string(info.libraryVersion.major) << "."
        << std::to_string(info.libraryVersion.minor) << std::endl;
}

这是我准备运行的设置:

配置属性→VC++目录:
  • 包含目录→添加C:\ Botan \ include \ botan-2;
  • 可执行目录→添加C:\ Botan \ bin;
  • 库目录→添加C:\ Botan \ lib;
  • 源目录→添加C:\ Botan \ src;
  • 其他包含库→添加C:\ Botan \ include \ botan-2

  • 连接器
  • 附加库目录→添加C:\ Botan \ lib;
  • 输入→其他依赖关系→添加C:\ Botan \ lib \ botan.lib

  • 我还安装了 token 驱动程序,该dll位于System32文件夹中。

    当我使用x86构建Botan库时,我使用以下配置调试项目:

    c&#43;&#43; - 将Botan用于PKCS#11的std::bad_alloc-LMLPHP

    我需要您帮助解决的错误是:
    Unhandled exception at 0x74CD2CF2 in ConsoleApplication1.exe: Microsoft C++ exception:
    std::bad_alloc at memory location 0x004FF1AC.
    

    此行代码中发生此错误:
    Botan::PKCS11::Module module("C:\\Windows\\System32\\ShuttleCsp11_3003.dll");
    

    这就是调用栈

    c&#43;&#43; - 将Botan用于PKCS#11的std::bad_alloc-LMLPHP

    请注意,我在调试文件夹中复制了botan.dll和ShuttleCsp11_3003.dll。

    有人请帮助,谢谢

    最佳答案

    使用Vcpkg(这是Microsoft创建的工具,可帮助获取和构建开源C和C++库),使用一个内衬Shell命令行自动安装botan,并将其集成到VS 2019项目中。

    从GitHub安装vcpkg后,在PowerShell提示符下键入以下命令以下载并安装包含所有依赖项的库:

    .\vcpkg install botan:x86-windows
    

    使用它可以自动(或者您可以手动完成)将库集成到VS项目中。
    .\vcpkg integrate install
    

    这是一个严重错误,这是项目无法识别 namespace 和包含文件的原因包含目录→添加C:\ Botan \ include \ botan-2不正确检查目录/文件名botan-2 ,它不应该存在。



    将dll文件复制到项目目录(用于调试测试)和应用程序文件夹(调试或发行版本),并且在加载PKCS#11共享库时不要忘记更正dll文件夹路径。

    关于c++ - 将Botan用于PKCS#11的std::bad_alloc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57494986/

    10-12 02:57