在Delphi中,我正在构建HTTP应用程序或Web服务器。它本质上是一个内置在单个EXE文件中的整个网站。我嵌入的文件包括HTML,JS,CSS,SWF,PNG,XML等。资源名称与原始文件名相同,.
替换为_
。最后,EXE中会嵌入大约40-60个文件。
问题是我不想编写包装每个单独文件的代码。现在,我正在为每个资源声明一个常量,并在使用TResourceStream
获取资源时使用该常量。 HTTP请求要求任何特定文件,因为我将有一堆文件,我不想要一个单独的方式来处理每个文件。另外,将来,当我添加一个要嵌入的新文件时,我应该做的就是将它添加到我的资源脚本(.rc)中。所以我决定改变我的机制来自动解析所请求的文件名到资源的名称。例如,/Home.HTML
被解析为HOME_HTML
,它应该是嵌入资源的名称。我需要在加载之前检查这样的资源是否存在。
我可以尝试加载它并捕获任何异常但如果资源不存在,这会在调试中产生错误。如何在不使用try..except
的情况下执行此类检查?
答案 0 :(得分:20)
您可以使用FindResource API,例如
if(FindResource(hInstance, PChar(ResourceName), RT_RCDATA) <> 0)then begin
// load the resource
end
答案 1 :(得分:2)
使用Win32 API FindResource()
函数。