#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 может быть «исполняемым файлом».