一段能在Windows2000下正常,在Windows98下却会出内存错误的代码,请大家指点!谢谢啦! (0分)

  • 主题发起人 主题发起人 Kirste
  • 开始时间 开始时间
K

Kirste

Unregistered / Unconfirmed
GUEST, unregistred user!
请帮忙看看下面这段代码哪出错了?编译后在Windows2000 下运行很正常,可Windows98下运行
却常出内存错误(Delphi6.0+Windows2000),谢谢啦!!!
代码:
function Getbm(Text:String):String;
var
   bmVal,RetVal: integer;
   MemMapFile:TMemMapFile;// 用来文件的内存映射
   SearchRec:TSearchRec;
   FoundStr:pchar;
   FName:String;
begin
    FoundStr:=nil;
    RetVal:=FindFirst(ExtractFilePath(Paramstr(0))+'*.bm',faAnyFile,SearchRec);
    try
       while (RetVal=0) and (FoundStr=nil) do
       begin
          FName:=ExtractFilePath(Paramstr(0))+SearchRec.Name;
          bmVal:=StrToInt(ExtractFileName(FName)[1]);
          MemMapFile:=TMemMapFile.Create(FName,fmOpenRead,0,True);//将查找到的文件内存映射
          try
          FoundStr:=StrPos(Pchar(MemMapFile.Data),Pchar(Text));//错误应该是在这行,因为如果我注释掉这行就正常
          Result:=copy(StrPas(FoundStr),1,bmVal+Length(Text));
          RetVal:=FindNext(SearchRec);
          finally
          MemMapFile.Free;
          end;
        end;
      finally
          FindClose(SearchRec);
      end;
end;
谢谢每位看完代码的人。
 
你确定是这段出错吗?
 
随手改了一下,试试!
MemMapFile:=TMemMapFile.Create(FName, fmOpenReadWrite, 0, False, True); //将查找到的文件内存映射

至于FoundStr:=StrPos(Pchar(MemMapFile.Data),Pchar(Text));一句,语法并无错误,所以猜测和上面那句有关。
 
function Getbm(Text:String):String;
var
bmVal,RetVal: integer;
MemMapFile:TMemMapFile;// 用来文件的内存映射
SearchRec:TSearchRec;
FoundStr:pchar;
FName:String;
begin
FoundStr:=nil; <==错在这里! FoundStr 是一个指针变量,在没有分配空间的
情况下给FoundStr:= nil,当然回报错。
 
看起来是文件映射不成功。
不知道TMemMapFile内部有没做该操作。
.........
MemMapFile:=TMemMapFile.Create(FName,fmOpenReadWrite or fmShareExclusive,0,True);//将查找到的文件内存映射
.........

文件必须使用读写以及独占方式打开才能进行文件映射。
 
to [blue]YB_unique[/blue]
文件内存映射应该没错,我不加上那行就不会出错,那个类我是参考书上写的。
to [blue]xianjun[/blue]
确定
[red]谢谢,谢谢![/red]
 
谢谢大家,其实大家都忽视了一点,就是代码本身并没有错,因为在Windows2000下能很
正常地运行,只有在Windows98下才会报错,可能是与平台有关,NT与95对内存管理的方
式不同。
 
谢谢大家,我把Pchar换成String就行了。
 
你能告诉我你是怎么解决的?我也有这问题,NT和2000中都可以,但WIN98就是不行,急死了

分在http://www.delphibbs.com/delphibbs/dispq.asp?lid=1629738
 
后退
顶部