Как проверить, существует ли встроенный ресурс?

В Delphi я создаю HTTP-приложение или веб-сервер. Это, по сути, целый сайт, встроенный в один EXE файл. Вложенные файлы включают HTML, JS, CSS, SWF, PNG, XML и т.д. Имена ресурсов такие же, как и исходное имя файла, при замене . на _. В конце концов, в EXE будет встроено около 40-60 файлов.

Проблема заключается в том, что я не хочу писать код, обертывающий каждый отдельный файл. Прямо сейчас я объявляю константу для каждого ресурса и использую эту константу при приобретении ресурса с помощью TResourceStream. HTTP-запрос запрашивает какой-либо конкретный файл, и поскольку у меня будет куча файлов, я не хочу иметь отдельный способ обработки каждого файла. Кроме того, в будущем, когда я добавлю новый файл для встраивания, все, что мне нужно сделать, это добавить его в свой ресурс Script (.rc). Поэтому я решил изменить свой механизм, чтобы автоматически разрешить имя файла, запрошенное для имени ресурса. Например, /Home.HTML получает разрешение на HOME_HTML, который должен быть именем встроенного ресурса. Мне нужно проверить, существует ли такой ресурс до его загрузки.

Я мог бы попытаться загрузить его и поймать любое исключение, но это приведет к ошибкам в отладке, если ресурс не существует. Как я могу выполнить такую ​​проверку, не используя try..except?

2 ответа

Вы можете использовать API FindResource, что-то вроде

if(FindResource(hInstance, PChar(ResourceName), RT_RCDATA) <> 0)then begin
 // load the resource
end


Используйте функцию Win32 API FindResource().

licensed under cc by-sa 3.0 with attribution.