我正在将std :: string传递给boost函数,该函数采用对该类型的const引用,但该值是突变的

问题描述 投票:0回答:1

我正在将std :: string传递给从boost-program-options dll导入的函数。该函数采用一个参数,并且是对字符串的const引用。但是,函数接收的值与我传递的值不同。这是最小的代码

#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安装
c++ boost dllimport stdstring boost-program-options
1个回答
1
投票

对陷入同样情况的任何人(调用从DLL导入的函数并接收参数的垃圾值,而不是您实际传递的内容)这可能是由于用于构建项目和DLL的配置不匹配所致。就我而言,我使用Vcpkg安装了一些Boost库。我在调试配置中构建项目时使用的是发行版本。事实证明,Vcpkg可以在调试配置中使用不同的构建集。我改用了那些,现在可以使用了。

© www.soinside.com 2019 - 2024. All rights reserved.