У меня есть DLL, которая содержит такой код:
class Info {
int a
int b
int c
std::string str1;
std::string str2;
};
__declspec(dllexport) class C {
Info getInfo();
}
Я компилирую этот код с помощью Visual Studio 2015, и вызов C::getInfo()
прекрасно работает в моей системе.
Теперь кто-то другой пытается использовать DLL, и он также использует Visual Studo 2015. Вызов проходит хорошо, но строки не содержат доступных данных.Даже отладчик сообщает «Ошибка чтения символов строки», и программа вылетает при попытке ее прочитать.
Была также похожая проблема с std::vector
, которую я мог решить, вставив код, создавший вектор.
Мне кажется, что либо другой человек использует другую версию STL, либо компилятор каким-то образом создает другую структуру памяти для std::string
(хотя он утверждает, что использует настройки по умолчанию).
Возможно ли это?Я видел, что существуют разные обновления для VS 2015, и у нас могут не быть установлены те же самые обновления.
Есть какие-либо рекомендации по исправлению этого?Я не могу перейти на char*
без значительного нарушения API.Большинство пользователей даже не используют Visual Studio (или Windows), поэтому до сих пор это не было проблемой.