Объект класса, возвращаемый из dll, имеет другой размер в exe - PullRequest
0 голосов
/ 20 ноября 2018

Мои DLL и EXE скомпилированы в одном VS2005 с почти одинаковыми настройками (два проекта в одном решении). EXE-файл содержит тот же заголовочный файл, который используется DLL.

Я попробовал два способа new объекта, определенного в DLL. Одним из них является new непосредственно в EXE, а другим способом является вызов статического метода в DLL и использование возвращаемого указателя. Оба способа имеют одинаковый неверный результат.

Я проверил память и обнаружил, что начальный адрес правильный, но где-то внутри класса его размер в EXE больше, чем в DLL. То есть адрес члена, возвращаемого в DLL, имеет вид 0x20000060, после назначения этого объекта в EXE этот адрес становится 0x20000064.

Все мои занятия использовались _declspec(dllexport), кстати.

Это единственный подобный вопрос, который я могу найти, но я не использую встроенные классы в DLL:

Размер структуры, содержащий вектор различные размеры между DLL и EXE

Я не знаю, какая информация вам нужна, чтобы выяснить проблему. Так что просто попросите все, что вам нужно, я предоставлю это.

1 Ответ

0 голосов
/ 20 ноября 2018

Ну, я только что нашел проблему.

DLL написан другим парнем, и он написал что-то ниже

#ifdef _CUSTOM_DATA
#pragma pack(push, 1)
#endif

Но в моем exe-файле макрос _CUSTOM_DATA не определен итакже не унаследовал от своего проекта.Тогда это приводит к тому, что структура будет иметь другой адрес после компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...