【发布时间】:2019-12-21 00:40:36
【问题描述】:
我是 C++ 新手,我真的坚持使用 Botan 连接到硬件加密令牌。我不知道我是否错过了 libs 或 dll 的任何设置。
我基于Building Botan library in Windows 10构建了Botan库。 botan.lib 和 botan.dll 是在构建后在 lib 文件夹中创建的。
然后我使用以下简单代码在 Visual Studio 2019 中创建一个控制台应用程序:
#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
我还安装了 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。
请大家帮忙,谢谢
【问题讨论】:
-
尝试将调试符号从 Botan 库的输出目录复制到项目的 Debug 文件夹并开始调试。这可以解释上升异常点的一些细节。
-
@Alexander 请您解释一下我应该怎么做,谢谢
-
构建调试版 Botan。将
botan.dll和botan.pdb文件复制到测试项目的 Debug 文件夹中。当您开始调试您的测试应用程序时,异常点将不是内存中的虚拟地址。 -
@Alexander 我构建了 Botan 的调试版本,将这些文件复制到调试文件夹中。但问题是我如何包含在应用程序中。我的意思是在这种情况下,“#include
”不起作用,因为在调试模式下构建具有不同的包含路径并且没有 lib 文件夹。 botan.lib 和botan.dll 在botan 文件夹的主根目录中创建。如何处理包含和库目录? -
@BzH 可能值得尝试使用另一个 pkcs#11 库(例如 SoftHSM)...祝你好运!
标签: c++ visual-studio cryptography pkcs#11 botan