FilimoniC
@FilimoniC

DLL ресурсов в — поясните для «скриптера» непонятные моменты, пожалуйста

Добрый день.
Я ни разу не программист-системщик. Всегда я программировал только в скриптовых языках и по данной причине имею слабое представление о более темных материях :-)

У меня несколько вопросов по теме программирования Resouce-Only DLL.

Суть вот в чем:
Одним из средств интернационализации имен файлов в винде является Desktop.ini
Содержимое (кусок) выглядит так:
[LocalizedFileNames] 3D Vision Photo Viewer.lnk=@%ProgramFiles(x86)%\NVIDIA Corporation\3D Vision\nvstlink.exe,-2003
(тут может быть и DLL-ка)

Если заглянуть ResourceHacker-ом в nvstlink.exe, то видно, что эта строка в дереве находится внутри String Table, в непонятном разделе 126, далее раздел с ID языка, потом набор строк.


Хотелось бы понять вот что:
1. ОС сама теребит эти ресурсы в файле или в DLL имеется какая-либо функция, отвечающая за выдачу этой строки?
2. Есть ли какой-либо пример создания такой Resource-Only библиотеки?
3 Я совсем не понимаю, что происходит в строке "@%ProgramFiles(x86)%\NVIDIA Corporation\3D Vision\nvstlink.exe,-2003". Понимаю, что есть DLL и есть ID строки, но как эта строка получается системой — не понимаю. Прошу разжевать, если не жалко.
4. Совсем героический поступок — прошу небольшое HowTo для создания библиотеки ресурсов.
  • Вопрос задан
  • 3241 просмотр
Пригласить эксперта
Ответы на вопрос 2
@mayorovp
Отвечаю по пунктам.
1. Во-первых, эти ресурсы нужны не ОС, а программам, которые их используют (исключение — манифест). Но ОС (точнее, библиотеки win32api) предоставляет способ эти самые ресурсы получить. В DLL никаких функций, отвечающих за выдачу ресурсов, нет (но есть тонкость — некоторые старые программы, чтобы получить ресурс, загружали библиотеку как исполнимую и тем самым вызывали ее инициализацию — этим пользовались некоторые вирусы). Кроме того, формат исполнимого файла и его ресурсов условно-известный, и можно работать с ресурсами напрямую, минуя специальные функции. Таким путем, кстати, идет ResHacker.

2. Примера создания я не знаю. Но если вы знаете хотя бы одну Resource-only библиотеку, вы можете удалить из нее все ресурсы, и получить «чистую», в которую потом можно засунуть любые другие ресурсы. Способ совершенно корректен, и, главное, избавляет от необходимости знакомиться с компиляторами и компилируемыми языками программирования.

3. Файл Desktop.ini — это декларативный файл настроек, а не императивная программа, поэтому, строго говоря, в данной строке вообще ничего не происходит. Вместо этого, данная строка говорит любой программе, способной понимать файл Desktop.ini, что для отображения файла 3D Vision Photo Viewer.lnk следует использовать строку номер 2003 для текущей локали из ресурсов PE-файла %ProgramFiles(x86)%\NVIDIA Corporation\3D Vision\nvstlink.exe О формате файла Desktop.ini хорошо написано в Википедии
Ответ написан
Комментировать
@rPman
ID это просто идентификатор, определяется программистом (правда есть какие то предопределенные варианты, но если ресурсвьювер их не понял… значит чистый custom user)

Все это великолепие определяется в исходных текстах проекта в resource.h и подключается при компиляции файла resource.rc в котором текстом все это было описано. Если вас нет это го файла, значит обламывайтесь… и ничто не мешает в новой версии программисту переопределить эти идентификаторы на свой вкус.

p.s. начните с этой кнопки msdn.microsoft.com/en-us/library/windows/desktop/aa380599%28v=vs.85%29.aspx
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы