Размер структуры, содержащий вектор <T>разных размеров между DLL и EXE - PullRequest
3 голосов
/ 19 мая 2010

У меня есть такая ситуация, когда EXE-программа импортирует DLL для одного вызова функции. Он работает, передавая пользовательскую структуру и возвращая другую пользовательскую структуру. До сих пор он работал нормально, пока я не хотел, чтобы один из элементов данных Struct был вектором

Когда я делаю sizeof (vector ) в моей программе, я получаю размер 20, но когда я делаю это из библиотеки DLL, я получаю размер 24. Это несоответствие размера вызывает ошибку указателя ESP. 1003 *

Может кто-нибудь сказать мне, почему Vector будет иметь другой размер в DLL, чем в программе?

Я подтвердил, что мои структуры как в DLL, так и в Программе идентичны.

Буду признателен за любую помощь по этому вопросу. Спасибо.

1 Ответ

1 голос
/ 02 сентября 2011

Я сталкиваюсь с подобной проблемой, когда у класса есть член вектора <..> и встроенная функция конструирования (реализовано в заголовочном файле). Независимо от того, является ли DLL версией выпуска или dll, как если бы EXE являлась версией выпуска, размер этого класса, рассчитанный в EXE, на 3 байта меньше, чем в DLL, поэтому стек будет уничтожен.

Эта проблема может быть исправлена ​​одним из следующих изменений:

  • Это происходит только с VC98 (SP6). Изменитесь на VS2008, проблема исчезнет.

  • Переместить функцию встроенной конструкции в файл CPP, проблема исчезает
    тоже.

Я надеюсь, что кто-то может помочь дать более подробное объяснение.

...