我正在将一个std::string传递给从boost-program-options dll导入的函数。该函数接受一个参数,它是对字符串的常量引用。但是,函数接收的值与我传递的值不同。这是最少的代码
#include "boost/program_options.hpp"
int main()
{
std::string s = "This is a string";
auto res = boost::program_options::to_internal(s);
}
这是函数
BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string& s)
{
return s;
}
当调用上面的函数时,参数"s"的值应该是"这是一个字符串",但值总是不同的。当我说不同的话时,我的意思是一长串随机字符串。太长,以至于 basic_string 构造函数引发异常。
我唯一的猜测是,它与函数的调用方式以及参数的传递方式有关,因为此函数是从外部 dll 导入的。
我遵循了宏BOOST_PROGRAM_OPTIONS_DECL定义,它只是__declspec(dllimport(
更多信息:
- 标准为 C++14
- 使用的工具集是Visual Studio 2019 v142
- Boost 库版本为 1.73.0,使用 vcpkg 安装
给陷入相同情况的任何人(调用从 DLL 导入的函数并接收参数的垃圾值,而不是您实际传递的内容( 这可能是因为用于生成项目和 DLL 的配置不匹配。 就我而言,我使用 Vcpkg 安装了一些提升库。我在调试配置中构建项目时使用发布版本。事实证明,Vcpkg 制作了一组不同的构建以用于调试配置。我改用那些,现在它可以工作了。