gpt4 book ai didi

delphi - TMemoryStream.ReadBuffer引发访问冲突异常

转载 作者:行者123 更新时间:2023-12-02 10:25:36 26 4
gpt4 key购买 nike

我尝试将加载到Memorystream中的前16个字节读取为TBytes。此ReadBuffer methot引发访问冲突异常。

我想从文件中加载加密的数据。前16个字节是用于创建文件的密码的MD5哈希。因此,加载后我要做的第一件事是检查提供的密码是否与编码的保存密码匹配。为此,我将LoadFromFile方法作为函数重新引入,返回了加载代码。
现在进行测试,我的文件仅包含16个字节的密码。
我检查了是否正确创建了MemoryStream。查看局部变量,我发现确实有16个字节被加载到Stream中。

  TEncMemoryStream = class(TMemoryStream)
strict private
PwdMD5: TBytes;
.
.
public
constructor Create;
destructor Destroy;override;
function LoadFromFile(Filename: String;PassWord:String):
TLoadResult;reintroduce;

.
.
function TEncMemoryStream.LoadFromFile(Filename: String;PassWord:String): TLoadResult;
begin
Result := lrLoaded;
try
inherited LoadFromFile(Filename);
ReadBuffer(PwdMD5,16); // <----- here the exception is thrown
except
Result := lrFailed;
end;
if Result = lrLoaded then
if not CheckPassWord(PassWord) then begin
Clear;
Result := lrWrongPwd;
end
end;

我也尝试了其他Read函数,它们都抛出相同的错误(这完全有意义,因为它们最终都调用TStream.Read方法)。

有人对引发此异常的原因以及如何解决此问题有线索吗?

最佳答案

默认情况下,PwdMD5为零。 IOW,您需要调用SetLength(PwdMD5,16)以便在读取文件时有一定的空间让字节走。

关于delphi - TMemoryStream.ReadBuffer引发访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58100428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com