如何检查嵌入式资源是否存在?

时间:2012-03-16 21:54:24

标签: delphi validation embedded-resource

在Delphi中,我正在构建HTTP应用程序或Web服务器。它本质上是一个内置在单个EXE文件中的整个网站。我嵌入的文件包括HTML,JS,CSS,SWF,PNG,XML等。资源名称与原始文件名相同,.替换为_。最后,EXE中会嵌入大约40-60个文件。

问题是我不想编写包装每个单独文件的代码。现在,我正在为每个资源声明一个常量,并在使用TResourceStream获取资源时使用该常量。 HTTP请求要求任何特定文件,因为我将有一堆文件,我不想要一个单独的方式来处理每个文件。另外,将来,当我添加一个要嵌入的新文件时,我应该做的就是将它添加到我的资源脚本(.rc)中。所以我决定改变我的机制来自动解析所请求的文件名到资源的名称。例如,/Home.HTML被解析为HOME_HTML,它应该是嵌入资源的名称。我需要在加载之前检查这样的资源是否存在。

我可以尝试加载它并捕获任何异常但如果资源不存在,这会在调试中产生错误。如何在不使用try..except的情况下执行此类检查?

2 个答案:

答案 0 :(得分:20)

您可以使用FindResource API,例如

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

答案 1 :(得分:2)

使用Win32 API FindResource()函数。