std::string нельзя присвоить значения в DLL
У меня есть решение VS 2010 C++ с двумя проектами, один генерирует DLL, а другой является драйвером для функций DLL. Весь следующий код
char cstring [256];
strcpy (cstring, "C String");
std::string string1 = "Test String";
std::string string2 (string1);
std::string string3;
string3.assign (cstring);
хорошо работать в драйвере. Но если один и тот же код размещен в любом месте проекта DLL, ни одно из значений string1, string2 и string3 не может быть успешно назначено с какими-либо значениями. В основном, отладчик показывает их как Bad Ptr. Похоже, они плохо распределяются в памяти.
Я попытался разместить std::string как поля членов класса, авто переменные и статические переменные. Но ни один из методов не работает так, как ожидалось. Кто-нибудь может мне помочь выяснить причину?
1 ответ
Я думаю, что причиной этого является отсутствие прикладного стандарта двоичного интерфейса (ABI). Эта проблема прекрасно описана в этом посте: Как передать объекты, особенно объекты stl, в и из библиотеки DLL.
Это также могут быть "свойства >> c/ C++ >> генерация кода >> настройки библиотеки времени выполнения" (параметры /MT и /MD), которые вам нужны, чтобы убедиться, что проект библиотеки и проект используются одинаково.