这段程序代码在win98下面怎么不能执行呢?(50分)

  • 主题发起人 主题发起人 pretty111
  • 开始时间 开始时间
P

pretty111

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下,在2000和XP下面一切正常,到了98就不起作用了:
procedure TForm1.Label1Click(Sender: TObject);
var MySysPath : PCHAR ;
sFromFileName1,sToFileName1: AnsiString;
begin
GetMem(MySysPath,255);
GetSystemDirectory(MySysPath,255);
sFromFileName1:=getcurrentdir+'/flash.ocx';
sToFileName1:=mysyspath+'/flash.ocx';
CopyFile(PChar(sFromFileName1),PChar(sToFileName1),false) ;
winexec('regsvr32 flash.ocx',sw_hide);
end;
 
你没有释放资源,同时你的flash.ocx最好加上路径。。。
 
初步估计,是Winexec找不到Regsvr32.exe,给Regsvr32.exe指出路径试验一下
>> winexec('regsvr32 flash.ocx',sw_hide);
winexec('C:/windows/System/regsvr32 flash.ocx',sw_hide);
 
是的,2000下的程序有的在98下运行不了
 
可能是找不到路径
有什么错误提示啊

 
FreeMem(MySysPath);
98下的regsvr32 得路径对么,试试你在98下直接运行command :regsvr32 flash.ocx能行么
 
如果照yzhshi说的这样,如果我的98系统不装在C盘呢?那不是一样的没有效果么?
还有,无忌兄,我没有释放资源是什么意思?能不能详细代码说明?

还有就是,我把flash.ocx拷贝到win98 system目录下面,在98下面用regsvr32 flash.ocx可以实现注册。
这个程序在运行的时候什么错误提示都没有。
 
那就这样来完啦

{获取系统目录}
function SystemDir: string;
var
dir: array[0..MAX_PATH] of Char;
begin
GetSystemDirectory(dir, MAX_PATH);
Result := StrPas(dir);
end;

>> winexec('regsvr32 flash.ocx',sw_hide);
winexec(SystemDir+'/regsvr32 flash.ocx',sw_hide);
 
不应该啊?!你不是都使用了GetSystemDirectory函数吗?怎么会找不到系统路径呢,只要
你使用GetSystemDirectory函数,系统装在哪个盘都无所谓啊。
释放资源当然是需要的,就是GetMem和FreeMem配对使用,一个分配一个释放,但和本题无关啊
 
procedure TForm1.Label1Click(Sender: TObject);
var MySysPath: PCHAR;
sFromFileName1, sToFileName1: AnsiString;
begin
GetMem(MySysPath, 255);
GetSystemDirectory(MySysPath, 255);
sFromFileName1 := getcurrentdir + '/flash.ocx';
sToFileName1 := mysyspath + '/flash.ocx';
CopyFile(PChar(sFromFileName1), PChar(sToFileName1), false);
winexec(MySysPath + '/regsvr32 flash.ocx', sw_hide);{这个是修改过的}
FreeMem(MySysPath);{这个是释放资源}
end;

 
看看你的sFromFileName1和sToFileName1中有没有两个连续的'/'

比如...//flash.ocx

这种情况在2000下处理完全正常,但在98下面处理会不正常的,速度很慢,许多时候索性出错
 
GetMem(MySysPath,255);
try
GetSystemDirectory(MySysPath,255);
sFromFileName1:=getcurrentdir+'/flash.ocx';
sToFileName1:=mysyspath+'/flash.ocx';
CopyFile(PChar(sFromFileName1),PChar(sToFileName1),false) ;
winexec('c:/windows/system/regsvr32 c:/temp/flash.ocx',sw_hide);
finally
FreeMem(MySysPath);
end;
 
嗯~~~青萍好像说到点子上了,分应该给他
var
TmpPath: string;
begin
if TmpPath[Length(TmpPath)] <> '/' then
TmpPath:= TmpPath+ '/';
TmpPath := TmpPath + 'flash.ocx'';
end;
这样就对了
 
释放资源是必须的,释放以后其他的东西都执行过来了,就是这个flash.ocx没有注册,
我用过winexec(MySysPath + '/regsvr32 flash.ocx', sw_hide);
可是这句程序调试的时候出错是什么意思?
错误提示:incompatible types:'string' and 'pChar'
 
winexec(PChar(MySysPath + '/regsvr32 flash.ocx'), sw_hide);
 
还是没有解决问题。
在硬盘上可以,程序一当刻上了光盘,程序就没有办法实现这个功能了。
 
其实,你需要学会的是调试的技巧。
在可能出问题的行设置断点,(就是在那行按F5),然后运行,执行到那行的时候就中断了,
然后按F7或者F8继续(F7是跟踪到子函数内部,F8是当前函数顺序前行)。
然后你就逐步看到问题了。

还有,如果在光盘上没有办法调试,不妨使用可擦写光盘,借助ShowMessage等来将各步骤的信息打印出来。
然后分析
 
问题没有解决。上面的代码flash.ocx在98系统中还是没有办法自动注册。
而且我没有犯上面哥们说的错误。。。。。。。。
 
拉倒,发分算了。
 
多人接受答案了。
 
后退
顶部