Я вызываю статически связанную DLL, и я вижу эту ошибку:
Я написал как .dll, так и код вызова. Эта ошибка не должна возникать. Мне интересно, встречался ли кто-нибудь еще раньше? Файл .dll содержит только около 10 строк кода, это всего лишь тестовая .dll, чтобы увидеть, как работают dll в целом. Он взрывается, когда я передаю std::string обратно из .dll.
Я использую Visual Studio 2012 и С++.
Что я буду делать дальше
От Утверждение отладки... _pFirstBlock == pHead:
Эта проблема может возникнуть, если вы используете однопоточные библиотеки в многопоточный модуль.
Завтра я попробую перекомпилировать статические библиотеки Boost в многопоточном режиме (мой .dll установлен в многопоточный статический режим).
Что я буду делать дальше
См. Использование строк в объекте, экспортированном из DLL, вызывает ошибку времени выполнения:
Вам нужно сделать одну из двух вещей
- Сделайте как DLL, так и клиент, которые используют его как ссылку на DLL-версию CRT (например, не статически).
- ИЛИ Вам необходимо убедиться, что вы не передаете динамически выделенную память (например, содержащуюся в строковых объектах) через границы DLL. Другими словами, не имеют DLL-экспортированных функций, возвращающих строку объекты.
Джо
Это похоже на то, что происходит, оно взрывается в точную точку, где я передаю строку обратно через границу .dll. Проблема возникает только тогда, когда все связано в статическом режиме. Теперь это исправление.
См. Передача ссылки на вектор STL через границу dll.
Что я буду делать дальше
См. Невозможно передать std:: wstring через DLL.
Решение
У меня есть хорошее решение, см. ответ ниже.