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), которые вам нужны, чтобы убедиться, что проект библиотеки и проект используются одинаково.

Другие вопросы по тегам