Есть ли список поддерживаемых типов файлов, которые могут содержать ресурсы? - PullRequest
3 голосов
/ 11 ноября 2011

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

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

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

Спасибо

Ответы [ 3 ]

5 голосов
/ 11 ноября 2011

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

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

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

1 голос
/ 12 ноября 2011

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

1 голос
/ 11 ноября 2011

Я использую 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;
..
...