Существует ли список поддерживаемых типов файлов, которые могут содержать ресурсы?

#delphi #winapi #resources #file-type

#delphi #winapi #Ресурсы #тип файла

Вопрос:

Я ищу список типов файлов, которые могут содержать ресурсы и могут быть загружены LoadLibrary или LoadModule функция.

Я хочу загрузить ресурсы с помощью LoadResource функции, где первым параметром является дескриптор модуля, и я хотел бы знать, какие типы файлов поддерживаются (могут содержать ресурсы и могут быть загружены LoadLibrary или LoadModule функция).

Примечание:
Я работаю над инструментом перевода с поддержкой ресурсов, и мне это нужно для фильтра диалогового окна открытия файла.

Спасибо

Ответ №1:

Я ищу список типов файлов, которые могут содержать ресурсы и могут быть загружены функциями LoadLibrary и LoadModule.

Вы не должны использовать LoadModule , это для совместимости с 16-битным приложением. LoadLibrary используется для загрузки библиотек: исполняемые файлы и DLL соответствуют всем требованиям. Поскольку вам нужна информация для вашего диалогового окна открытия файла, я предполагаю, что вас больше всего интересуют применимые расширения файлов. К сожалению, это непросто, потому что EXE-файлы и библиотеки DLL не обязательно должны иметь расширения EXE и DLL. Например, SCR расширение является популярным расширением для экранных заставок, но фактический файл — это plane EXE. BPL это расширения скомпилированных пакетов Delphi, но эти файлы на самом деле являются DLL «s», насколько это возможно LoadLibrary .

На мой взгляд, вам следует просто фильтровать EXE и DLL, но позволить пользователю открывать все, что он хочет. Вы будете знать, действительно ли это совместимо с, LoadLibrary если LoadLibrary произойдет сбой или нет.

Комментарии:

1. .ocx .vxd .бпл и я предполагаю, что их больше.

2. 1 и примите, о LoadModule я пропустил это замечание, спасибо. В любом случае я использовал только LoadLibrary . Я искал официальные расширения типов файлов, которые могут содержать ресурсы, но вы правы, я останусь с *.exe и *.dll фильтром по умолчанию. Итак, я решаю это просто с помощью этого фильтра Binary files (*.exe;*.dll)|*.exe;*.dll;|All files (*.*)|*.* . Спасибо!

3. Еще лучше, используйте LoadLibraryEx с LOAD_LIBRARY_AS_DATAFILE. Таким образом, вы не выполняете какой-либо код, который может быть запущен DllMain.

Ответ №2:

Я использую DLL-файлы с ресурсами. функция loadresource отлично работает с функцией loadlibrary. Например,

 ..
var
   LibHandle: THandle;
   Bmp: TBitmap;
begin
   LibHandle := LoadLibrary(PChar('MYDLL.DLL'));
   if LibHandle <> 0 then
   try
     Bitmap := Tbitmap.Create;
     Bitmap.LoadFromResourceName(LibHandle, 'ICON16');  // ICON16 - Resource name, which contains bitmap with size 16x16
   ..
   except on E: exception do
     ..
   end;
..
  

Ответ №3:

На самом деле, что касается спецификации PE (COFF), расширение «Переносимого исполняемого» файла не играет никакой роли! Даже файл без расширения может быть допустимым файлом, который можно загрузить с помощью LoadLibrary (например). Как правильно сказал Прунд «Вы узнаете, действительно ли он совместим с LoadLibrary, только если произойдет сбой LoadLibrary или нет ..»! Потенциально, любой файл (даже файл с именем myfile.doc может быть «исполняемым файлом».