Jer*_*dge 2 delphi web-applications stream embedded-resource
我在这里按照教程了解如何在EXE中包含文件.虽然我成功地编译了PNG图像,但在使用它时,我没有成功.
MyResources.rc
LOGO_PNG RCDATA Resources\Logo.png
Run Code Online (Sandbox Code Playgroud)
MyConsoleUnit.pas
const
RES_LOGO_PNG = 'LOGO_PNG';
implementation
{$R *.dfm}
{$R 'MyResources.res' 'MyResources.rc'}
Run Code Online (Sandbox Code Playgroud)
现在,这对我来说有点混乱.我必须处理所有流,没有文件.我已将此PNG图像嵌入此Logo.png资源,以便在/Logo.png从Web服务器请求时作为内容(作为流)传回.我还遵循了一个非常基本的教程:
procedure TMyWebConsole.MyWebConsoleLogoAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
RS: TResourceStream;
begin
RS := TResourceStream.Create(HInstance, RES_LOGO_PNG, RT_RCDATA);
try
Response.ContentType:= 'image/png';
RS.SaveToStream(Response.ContentStream);
finally
RS.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
问题是,当调用此函数时(at SaveToStream),我得到访问冲突.客户端上的Web浏览器接收与"PNG文件"的内容相同的错误消息.

那为什么要这样做呢?我究竟做错了什么?
您正在访问空指针.它可能是Response.ContentStream,你应该分配的属性,而不是读取.文档说明了这一点:
注意:如果ContentStream属性的值不是nil,则忽略Content属性.
这表明ContentStream可能是零.因此,如果要使用它,则需要为其分配值:
Response.ContentStream := TResourceStream.Create(HInstance, RES_LOGO_PNG, RT_RCDATA);
Run Code Online (Sandbox Code Playgroud)
文档进一步解释:
如果您使用ContentStream属性,请不要自己释放流.Web响应对象会自动为您释放它.
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |