Вот столкнулся с оригинальной траблой. В целях экономии места, решил я запихать директории импорта и ресурсов в секцию с данными. До определенного момента все работало нормально, но потом стало глючить. Глюки заключались в том, что при добавлении одной определенной записи в директорию импорта директория ресурсов умирала, но прога работала. Только ресурсы очень коряво отображались. Я об этом в ЖЖ писал. Проблему решил тем, что поменял местами директорию импорта и директорию ресурсов (ресурсы поставил перед импортами). И вдруг, при добавлении новых данных в секцию (перед ресурсами), баг снова вернулся. Наученный горьким опытом, засунул директорию ресурсов перед данными и снова все заработало как в старь. Все эти события породили во мне вопросы, на которые я так и не нашел ответа: что с директорией ресурсов не так? Какие тонкости необходимо учесть при работе с ней? Похоже, что она должна быть выровнена, но на какое значение и почему? Просвятите, плиз..
Там кажется одна проблема - в свойствах файла версия не отображается если таблица ресурсов находится не в начале секции, где-то уже обсуждали, поищи, видимо глюк микрософта
Должны быть выровнены по 4х байтной границе некоторые вещи: - IMAGE_RESOURCE_DIRECTORY - сами данные: иконки, меню, манифест и т.п. - некоторые поля структуры VS_VERSIONINFO - см. MSDN получено методом научного тыка, поэтому возможно не совсем верно =)
Удивительно, что ресурсы у тебя так долго трепыхались прежде, чем умереть. В самой секции есть таблица ресурсов. В ней оффсеты на поддиректории - относительно секции, а оффсеты на данные - относительно имиджа секции в памяти. Если, при добавлении данных в предыдущую секцию, она растёт и "смещает" в памяти ресурсы, а оффсеты остаются на старое расположение в памяти, то они указывают в никуда.
Мало того, что бы offset'ы указывали "куда надо", нужно ещё что бы при этом их младшие 2 бита были равны 0.
Ну, в принципе, я так и думал.. Хотя все-равно странно все это.. Директория импорта вот нормально живет и не пищит, а ресурсы капризничают.