繁体   English   中英

std::bad_alloc 使用 Botan 进行 PKCS#11

[英]std::bad_alloc using Botan for PKCS#11

我是 C++ 新手,我真的坚持使用 Botan 连接到硬件加密令牌。 我不知道我是否错过了 libs 或 dll 的任何设置。

我基于在 Windows 10 中构建 Botan 库构建了 Botan 库 botan.lib后在 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++目录:

  1. 包含目录 → 添加 C:\\Botan\\include\\botan-2;
  2. 可执行目录→添加C:\\Botan\\bin;
  3. 库目录→添加C:\\Botan\\lib;
  4. 源目录→添加C:\\Botan\\src;
  5. 附加包含库 → 添加 C:\\Botan\\include\\botan-2

链接器

  1. 附加库目录 → 添加 C:\\Botan\\lib;
  2. 输入 → 附加依赖项 → 添加 C:\\Botan\\lib\\botan.lib

我还安装了令牌驱动程序,它的 dll 位于 System32 文件夹中;

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

在此处输入图片说明

我需要您帮助解决的错误是:

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");

这是调用堆栈

在此处输入图片说明

请注意,我在调试文件夹中复制了 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

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

  • 应该是 C:\\Botan\\include; 因为您的程序在文件夹路径中包含 botan(例如 #include "botan/botan.h")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM