把一个EXE文件读出来用文本框显示,Buf一直是空的。
procedure TfrmPEView.LoadFileToText;
var
i,nFileHnd,nFileLen,nReadByte: Integer;
Buf: PChar;
begin
try
nFileHnd := FileOpen('F:\abc.exe', fmOpenRead{ or fmShareDenyNone});
nFileLen := FileSeek(nFileHnd,0,soFromEnd);
FileSeek(nFileHnd,0,soFromBeginning); Buf := PChar(AllocMem(nFileLen + 1));
nReadByte := FileRead(nFileHnd, Buf, nFileLen);
FileClose(nFileHnd); for i := 0 to nReadByte - 1 do
begin
if Buf[i] = #0 then
Buf[i] := #20;
end; FileText.Text := String(Buf);
finally
FreeMem(Buf);
end;
end;
procedure TfrmPEView.LoadFileToText;
var
i,nFileHnd,nFileLen,nReadByte: Integer;
Buf: PChar;
begin
try
nFileHnd := FileOpen('F:\abc.exe', fmOpenRead{ or fmShareDenyNone});
nFileLen := FileSeek(nFileHnd,0,soFromEnd);
FileSeek(nFileHnd,0,soFromBeginning); Buf := PChar(AllocMem(nFileLen + 1));
nReadByte := FileRead(nFileHnd, Buf, nFileLen);
FileClose(nFileHnd); for i := 0 to nReadByte - 1 do
begin
if Buf[i] = #0 then
Buf[i] := #20;
end; FileText.Text := String(Buf);
finally
FreeMem(Buf);
end;
end;
解决方案 »
- DLL 窗体融合问题,闹心啊
- 调用函数出错
- 初次用Delphi2007,请教2问题(InfoPower2007和一个编译的问题)
- 关于开发Delphi的IDE插件的问题。
- 比较急,请各位大侠进来看看!来者有分
- 100分求救!dbexpress + mssql2k,exe文件在自己的机器上能运行,在别的机器上不行。
- 真的好郁闷,大家来帮个忙!只有百分感谢!
- 急聘:程序设计师,学历无要求,可立即上班 。
- 如何在Delphi中编程序实现本机IP地址的获得?
- 100分,如何模拟Ctrl+V按键
- 为何delphi编译后只生成一个可执行文件 ,而常见软件都并不是只有一个exe文件?
- webbrowser 点击超级链接 怎么让新弹出页面还在webbrowser里
改成nReadByte := FileRead(nFileHnd, Buf^, nFileLen);
试试
改为
nReadByte := FileRead(nFileHnd, Buf^, nFileLen);
多了一个^号
如果用FileText.Text := String(Buf);或FileText.Text := AnsiString(Buf);会卡死
刚开始用Delphi,还不能一下子从C++转过来
就像Ultraedit一样,有字符模式,也有16进制模式
每次发贴都可以得到30分。你发贴提问反而赚分了哦。
第二,如果用资源把EXE做进自己的程序中,用资源查看器可以提取出来,对EXE保密性不强。
程序会停在Memo.Text := AnsiString(Buf); //String(Buf);
procedure TfrmPEView.LoadFileToText;
var
i: Integer;
Buf: PChar;
MS: TMemoryStream;
begin
try
MS := TMemoryStream.Create;
MS.LoadFromFile(FileName);
MS.Position := 0; Buf := AllocMem(MS.Size);
CopyMemory(Buf,MS.Memory,MS.Size); for i := 0 to MS.Size - 1 do
begin
if Buf[i] = #0 then
Buf[i] := #20;
end; FileText.Lines.Clear;
FileText.Text := StrPas(Buf); // 程序会停在这儿
finally
FreeMem(Buf);
MS.Destroy;
end;
end;