【发布时间】:2010-07-07 07:37:48
【问题描述】:
我有这样的记录
TEmf_SrectchDIBits = packed record
rEMF_STRETCHDI_BITS: TEMRStretchDIBits;
rBitmapInfo: TBitmapInfo;
ImageSource: string;
end;
---
---
RecordData: TEmf_SrectchDIBits;
如果我像这样使用 TStream 将数据读入其中,则会发生异常
SetLength(RecordData.ImageSource, pRecordSize);
EMFStream.ReadBuffer(RecordData.ImageSource,pRecordSize)
但是如果我使用下面的代码,它可以正常工作
SetLength(RecordData.ImageSource, pRecordSize);
EMFStream.ReadBuffer(RecordData.ImageSource[1], pRecordSize);
那么使用String和String[1]有什么区别
【问题讨论】:
-
你的那条记录真的是一个奇怪的野兽,它被标记为打包记录(拒绝编译器优化)但它包含一个“字符串”,它不应该直接流式传输,也不应该是与 Delphi 之外的任何东西接口。我很确定您想删除 `packed` 或将 ImageSource 更改为如下内容:` ImageSource: string[128] ` - 即,使用旧的帕斯卡风格,固定长度的字符串。
标签: delphi delphi-2007 delphi-2006