Я передаю std :: string функции повышения, которая принимает константную ссылку на этот тип, но значение изменяется - PullRequest
0 голосов
/ 25 мая 2020

Я передаю std :: string функции, импортированной из библиотеки boost-program-options. Функция принимает один параметр, и это постоянная ссылка на строку. Однако значение, которое получает функция, отличается от того, что я передаю. Вот минимальный код

#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, и это просто __declspe c (dllimport)

Дополнительная информация:

  • стандарт - C ++ 14
  • Используемый набор инструментов - Visual Studio 2019 v142
  • Версия библиотеки Boost 1.73.0 и устанавливается с помощью vcpkg

1 Ответ

1 голос
/ 29 мая 2020

Всем, кто застрял в той же ситуации (вызов функции, импортированной из DLL, и получение значений мусора для аргументов вместо того, что вы фактически передаете). Это, вероятно, из-за несоответствия конфигураций, используемых для сборки вашего проекта и DLL. В моем случае я установил некоторые библиотеки ускорения с помощью Vcpkg. Я использовал релизные сборки при создании своего проекта в отладочной конфигурации. Оказалось, что Vcpkg создает другой набор сборок для использования в конфигурации отладки. Я перешел на их использование, и теперь он работает.

...