以下这个运行错误是什么意思(100分)

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

pi

Unregistered / Unconfirmed
GUEST, unregistred user!
有一段opengl的程序,单独编译运行都没有问题,当加入到我的主程序
中(我的想法是在主程序中加入一个button,当按下这个button 后
进入这段opengl程序的显示界面),可以编译运行,但按下此button后
出现如下错误:

project project1.exe raised exception class EAccessViolation
with message 'Access Violation at address 00434E8A in module
'project1.exe'.Read of address 000002C0'.Process stopped.Use
Step or Run to continue.

请各位大虾指点迷津!
 
g
虽然我不懂opengl,但你总的把出错部分的代码贴出来吧, 否则让大家猜谜?
 
或者这样说吧,我想把两个project连接起来,在其中一个的界面上加一个button,
按下这个button后出现另一个的操作界面,而我是这样做的,在此button的onclick
事件中加入如下代码:
form1.visible:=false;
form2.visible:=true;
结果就出现上述错误。什么原因?应该怎么做?
 
关键是你是想把两个执行文件连起来还是将两个程序的源代码连接起来。

若连接两个执行文件,则用WINEXEC即可。

若连接源代码,则只需在button的onclick事件中加入如下代码:
form2.show;

form2.showmodal;
但是必须保证form2已经存在,否则必须先CREATE FORM2:
FORM2:=TFORM2.CREATE(SELF);
 
你还是单步跟踪一下吧! 先找出一个大致的出错位置.
 
>form1.visible:=false;

你的form1是主窗口不能把visible设为false
 
YCK大虾:
我用create(self)的方法解决了上述问题,
但是能否解释一下什么叫“form2已经存在”?
我是要把两个project连接起来,其中每一个
都有自己的form,这样算不算已经存在?
thanks!
 
PI大虾:
如果你是想连接两个PROJECT,因为每个PROJECT都会各自编译成一个可执行文件,所以你所说的连接两个PROJECT其实就是其中一个应用程序调用另一个应用程序,应使用WINEXEC。否则的话,你就应该把这两个窗体集成到一个PROJECT中,其中一个窗体调用另一个,使用方法showmodal或show.但是在调用之前必须保证该窗体对象是存在的,也即已经create过了。createform可以在dpr文件中调用,也可以在其他文件中调用。
 
其实是你在调用form2.show的时候form2的值为nil,这时form2对象还没有创建。
一般如果一个Form是新加的,Delphi会自动在.dpr文件中自动加入一句类似于
form2 := Application.CreateForm( TForm2, form2);
的语句,其作用就是在运行程序时就将Form2对象创建好。
由于你的Form2是从另一个工程中拷过来的,Delphi没有为你自动生成这句,需要
你手工添上。或者你可以在显示Form2前直接这样调用:
form2 := TForm2.create(self);
 
多人接受答案了。
 

Similar threads

后退
顶部