dllexported добавленная строка повреждена - PullRequest
1 голос
/ 20 апреля 2011

у меня есть exe, загружающий dll. я написал оба.

Я использую функцию foo, которая возвращает std :: wstring.

все, что он делает, это говорит

std :: wstring blah = L "rgjwgfw";

  return blah.append(L"hey");

в exe, куда я импортирую foo, строка повреждена. как только я возвращаюсь из функции, где я вызываю foo, я получаю ошибочные утверждения. иногда я получаю сообщение о том, что Windows запустила точку останова в foo.exe. это может быть связано с повреждением кучи и т. д. ..... Это также может быть связано с тем, что пользователь нажимает клавишу f12, пока foo.exe находится в фокусе. и т.д ....

есть идеи, почему это происходит? этого не произойдет, если я удалю строку добавления из foo и jsut вернет исходную строку, проблем нет.

спасибо

1 Ответ

3 голосов
/ 20 апреля 2011

Это довольно распространенная проблема.Вам необходимо связать и DLL, и исполняемый файл, чтобы использовать стандартную библиотеку в DLL.Таким образом, они разделяют общую копию стандартной библиотеки в общую кучу.В противном случае вы получите код в исполняемом файле, пытающийся использовать одну кучу, и код в DLL, используя отдельную кучу.Когда вы пропускаете почти все, что использует динамическое распределение через границу, каждый предполагает, что динамически выделенный буфер в объекте был получен из его собственной кучи.Практически любая манипуляция может повредить не только объект, но и всю кучу.

...