为什么非法操作?(150分)

  • 主题发起人 主题发起人 GuXl
  • 开始时间 开始时间
G

GuXl

Unregistered / Unconfirmed
GUEST, unregistred user!
编了一个程序,编译无任何错误,但运行时显示:
该程序执行了非法操作,即将关闭,
详细资料显示无效页错误。

将Project|Options|Compiler|Optimization
或 Project|Options|Compiler|Use Debug DCUs 选上后,
按F9在IDE中运行无错误,但程序单独运行仍有错误发生。

我将程序经过大量删减后,仅余下项目文件和两个很简单的单元,
这时仍有上面的错误,但再将其中任意一条语句删除或去掉其中一个
单元就不出错了。

我是初学者,能力有限。想不通问题出在哪,也不知是不是我的系统的毛病,
百思不得其解,急盼各位高手指教。

注意程序中的那个窗口在New Form后还要在uses后加上两个单元

我用的Delphi的版本是
Enterprise Version5.0(Build6.18) Update Pack 1
Windows的版本是 Win98(Build 4.10.2222A)

下面是程序:
==================================================
//MySS.dpr

program MySS;
uses
SysUtils, IniFiles,
Init in 'Init.pas',
U2 in 'U2.pas' {Form1};

{$R *.RES}

var FindWindwsHandle:array[0..255] of Char;
subtitle:string;

begin
with TiniFile.create('MySS.ini') do
begin
subtitle:=ReadString('SubTitle','Text',' ');
free
end;

StrPCopy(FindWindwsHandle,'TForm');
if (Paramcount>0) then
Copy(UpperCase(ParamStr(1)),1,2);

end.


==================================================

//U2.pas

unit U2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
registry, Buttons //多用了这两个单元
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

end.

==================================================


//Init.pas

unit Init;
interface
const
information: string
=('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz!');
//这一字符串也不能少
implementation

end.

==================================================

检索了一下以前的文章,
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=251987
说的问题似乎与此类似,但不太清楚,也没有得到满意的答复。
我再出150分求高手解疑。
 
看你所贴出来的, 没有问题.
if (Paramcount>0) then
Copy(UpperCase(ParamStr(1)),1,2);
这一句没用, 是不是少什么东西?
还有你的创建 form 的代码呢 ?
 
to superMMX:我删除了程序中很多语句,这一句原来是用来分析命令行的,
要赋值给一个变量,给我删除了.就请帮我看看那个问题是怎么产生的吧.
form 的单元是U2.pas, 创建 form 的代码也给删除了,可以加上去,
执行了非法操作的原因好像与此无关。
 
谁能帮我再试一试程序,验征一下是否会出现这个错误
 
There is no problem in your code you pasted.
Do you use debug to trace into?
First you should find the position where occurs error.
do you perform any action after you start your application?
can you offer more detail information?
 
将Project|Options|Compiler|Optimization 和 Use Debug DCUs 都不选上,
按F7在subtitle:=ReadString('SubTitle','Text',' ')一行出错,
奇怪的是把那两个选项选上或把一些看似不相关的语句删除就不出错了。

我没在其它机上编译程序,但编译后的程序在另一台机上试过,也是非法操作。
 
; 更奇怪的是把单元init中的那个字符串长度减小了也没错误了,
是不是由于内存溢出造成的.
 
; 附加功能 将问题提前
 
问题已解决了
TiniFile.create('MySS.ini') 在无MySS.ini文件时,或无读取得主键时,
在windows中运行程序都会出错,出错的地方是GetPrivateProfileString函数,
该函数是外部函数:
function GetPrivateProfileString; external kernel32 name 'GetPrivateProfileStringA';
因此,这个问题可能是 烂98 的 Bug。
先判断文件是否存在或改用 Tmeminifile 对象,就无错误发生了。
谢谢大家的建议,分数就按写的文字的多少分吧
 
后退
顶部