Std:: строка не сохраняется между приложением и log4cxxd.dll, оба режима отладки
ОС: Windows 7 Pro
IDE: Visual Studio 2015
Дорогие друзья,
У меня происходит странная вещь, когда я пытаюсь запустить любое приложение, скомпилированное со стандартными настройками отладки и связанное с отладочной версией Apache log4cxx, библиотеки DLL logger, которую я также скомпилировал со стандартными настройками отладки.
Когда я запускаю код, как показано ниже, с
LOG4CXX_INFO(logger0, st.c_str());затем он пишет" xyz " на консоль, как и следовало ожидать.
Однако, когда я запускаю его с помощью
LOG4CXX_INFO(logger0, st);то есть строковый объект передается функции dll (по ссылке), программа выходит из строя. Шаг в вызываемую функцию показывает, что буфер строкового объекта () указывает не на тот же адрес (0x0037fa58 "xyz"), а на (0x0037fa54 "xyz"), то есть на 4 байта левее оригинала.
Любой намек очень ценится - большое вам спасибо.
Овации
Вернер
код вызова
std::string st = std::string("xyz"); LOG4CXX_INFO(logger0, st);
Код называется
CharMessageBuffer& MessageBuffer::operator<<(const std::string& msg) { return cbuf.operator<<(msg); }
Что я уже пробовал:
Я заподозрил _ITERATOR_DEBUG_LEVEL и проверил, было ли это 2 как в приложении, так и в dll (true). Если я установлю _ITERATOR_DEBUG_LEVEL=0, удивительно, но приложение также ссылается на dll без жалоб, и ссылка на строку правильно передается вызываемой функции: код работает.