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