再问问题

一个程序 procedure try is begin procedure 1; statement 2; end try; 其中statement 1 是调用另外一个package里面的程序。 它的功能是产生一个界面,用gtkada做的。编译成功。然后运行的时候,执行procedure 1出现一个界面,但是statement 2 就不再被执行了。程序一旦运行到产生界面那一句,就停止了,不在往后继续运行了,很郁闷,为什么??

把你的代码发来看看啊

下面是代码。先是模仿孟大哥的程序,截取一段,写了这个Inputdialog的package.然后有用一个testdialog的procedure 来测试一下,看是不是编译得成功。然后就发现,Inputdialog.Window;执行完,后面那句 Put(Austemp);就不再执行了,为啥?? ------------------------------------------------------------------------------------------------------------------- --File: InputDialog.ads --Author: Shanshan Dai, 25.10.2006 ------------------------------------------------------------------------------------------------------------------- package Inputdialog is Austemp: Float; procedure Window; end Inputdialog; ------------------------------------------------------------------------------------------------------------------- --File: InputDialog.adb --Author: Shanshan Dai, 25.10.2006 ------------------------------------------------------------------------------------------------------------------- with Gtk.Main; use Gtk.Main; with Gtk.Box; use Gtk.Box; with Gtk.Label; use Gtk.Label; with Gtk.Window; use Gtk.Window; with Gtk.Button; use Gtk.Button; with Gtk.Gentry; use Gtk.Gentry; with Gtk.Handlers; use Gtk.Handlers; with Gtk.Widget; use Gtk.Widget; with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Ada.Text_Io; use Ada.Text_Io; package body Inputdialog is procedure Window is type T_Objects is record Window: Gtk_Window; Zone: Gtk_Hbox; Button: Gtk_Button; Text: Gtk_Entry; Mylabel: Gtk_Label; end record; type T_Obj_Acc is access T_Objects; Obj: T_Obj_Acc:= new T_Objects; package Button_Callback is new Gtk.Handlers.User_Callback(Gtk_Button_Record, T_Obj_Acc); procedure Callback(Object: access Gtk_Button_Record'Class;Data_Obj: T_Obj_Acc) is pragma Unreferenced (Object); begin Austemp:=Float'Value(Get_Text(Data_Obj.Text)); Put("Aussentemperatur ist: "); Put(Austemp); end Callback; begin Init; Gtk_New(Obj.Window); Set_Title(Obj.Window, "InputDialog"); Set_Size_Request(Obj.Window,200,80); Gtk_New_vbox(Obj.Zone, False,0); Add(Obj.Window, Obj.Zone); Gtk_New(Obj.Mylabel, "Aussentemperatur eingeben: "); Pack_Start(Obj.Zone,Obj.Mylabel,True,True,0); Gtk_New(Obj.Text); Pack_Start(Obj.Zone,Obj.Text,True,True,0); Gtk_New(Obj.Button, "OK"); Pack_End(Obj.Zone, Obj.Button, True, True,0); Show_All(Obj.Window); Button_Callback.Connect(Obj.Button, "clicked", Button_Callback.To_Marshaller(Callback'access),obj); Main; end Window; end Inputdialog; with Inputdialog; use Inputdialog; with ada.Float_Text_IO; use ada.Float_Text_IO; ------------------------------------------------------------------------------------------------------------------- --File: TestDialog.adb --Author: Shanshan Dai, 25.10.2006 ------------------------------------------------------------------------------------------------------------------- procedure Testdialog is begin Inputdialog.Window; Put(Austemp); end Testdialog;

------------------------------------------------------------------------------------------------------------------- --File: InputDialog.ads --Author: Shanshan Dai, 25.10.2006 ------------------------------------------------------------------------------------------------------------------- generic Austemp: in out Float; package Inputdialog is procedure Window; end Inputdialog; ------------------------------------------------------------------------------------------------------------------- --File: TestDialog.adb --Author: Shanshan Dai, 25.10.2006 ------------------------------------------------------------------------------------------------------------------- with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Inputdialog; procedure Testdialog is Austemp : Float; package My_Inputdialog is new Inputdialog(Austemp); use My_Inputdialog; begin Window; Put(Austemp); end Testdialog;

>gcc -c Inputdialog.adb +===========================GNAT BUG DETECTED==============================+ | 3.12p (19990629) (i586-pc-mingw32msv) Gigi abort, Code=102 | | Error detected at c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-marshallers.adb:909:34 [c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-handlers.ads:999:7 [inputdialog.adb:25:1]]| | Please submit bug report by email to report@gnat.com. | | Include the entire contents of this bug box in the report. | | Include the exact gcc or gnatmake command that you entered. | | Also include sources listed below in gnatchop format | | (concatenated together with no headers between files). | | See gnatinfo.txt for full info on procedure for submitting bugs. | +==========================================================================+ Please include these source files with error report c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-bitmap.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-color.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-cursor.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-drawable.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-event.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-font.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-gc.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-pixbuf.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-pixmap.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-rectangle.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-region.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-rgb.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-types.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-visual.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gdk-window.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-error.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-generic_properties.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-glist.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-gslist.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-object.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-properties.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\glib-values.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-accel_group.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-adjustment.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-bin.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-box.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-button.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-container.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-editable.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-enums.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-gentry.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-handlers.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-handlers.adb c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-label.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-main.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-marshallers.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-marshallers.adb c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-misc.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-notebook.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-object.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-style.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-widget.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtk-window.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtkada.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\gtkada-types.ads inputdialog.ads inputdialog.adb c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango-attributes.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango-context.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango-enums.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango-font.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango-layout.ads c:\PROGRA~1\admin\program\ada\GNAT\lib\gcc-lib\pentium-mingw32msv\2.8.1\adainclude\pango-tabs.ads inputdialog.adb:29:01: warning: unrecognized pragma "Unreferenced" gtk-handlers.adb:345:10: warning: unrecognized pragma "Unreferenced" gtk-handlers.adb:598:10: warning: unrecognized pragma "Unreferenced" gtk-handlers.adb:959:10: warning: unrecognized pragma "Unreferenced" gtk-handlers.adb:1306:10: warning: unrecognized pragma "Unreferenced" gtk-marshallers.adb:230:13: warning: unrecognized pragma "Unreferenced" gtk-marshallers.adb:467:13: warning: unrecognized pragma "Unreferenced" gtk-marshallers.adb:688:13: warning: unrecognized pragma "Unreferenced" gtk-marshallers.adb:909:13: warning: unrecognized pragma "Unreferenced" compilation abandoned >Exit code: 1

定义一个变量,比如austemp:float 如果没有特别指出 In Out , 那他是in 还是out 或者是in out? 还有,那个Inputdialog.adb也要做相应修改吧,我怎么编译不成功。generic 我不是很懂,为什么这么改了以后,就可以啦?孟大哥稍微解释下不(小声问。。。。呵呵。。。) [已被 shanshan81 编辑过,在 2006-10-30 15:57]

用Generic在程序包引入参数,默认状态是in, 你的数值要在程序包里变化,所以要用in out了。 Inputdialog.adb的确要做相应变化,具体怎么,参考资料自己琢磨罗,简单。

不理解你为什么还要

不理解你为什么还要第二次输出那个温度?

package Inputdialog is

Austemp: Float;
procedure Window;

end Inputdialog;

------------------------------------------------------------------

with Gtk.Main;
use Gtk.Main;
with Gtk.Box;
use Gtk.Box;
with Gtk.Label;
use Gtk.Label;
with Gtk.Window;
use Gtk.Window;
with Gtk.Button;
use Gtk.Button;
with Gtk.Gentry;
use Gtk.Gentry;
with Gtk.Handlers;
use Gtk.Handlers;
with Gtk.Widget;
use Gtk.Widget;
with Ada.Float_Text_Io;
use Ada.Float_Text_Io;
with Ada.Text_Io;
use Ada.Text_Io;

package body Inputdialog is
   procedure Window is
      type T_Objects is
         record
            Window  : Gtk_Window;
            Zone    : Gtk_Hbox;
            Button  : Gtk_Button;
            Text    : Gtk_Entry;
            Mylabel : Gtk_Label;
         end record;

      type T_Obj_Acc is access T_Objects;
      Obj : T_Obj_Acc :=
      new T_Objects;

      package Button_Callback is new
         Gtk.Handlers.User_Callback(Gtk_Button_Record, T_Obj_Acc);

      package Text_Callback is new
         Gtk.Handlers.Callback(Gtk_Entry_Record);

      procedure Btncallback (
            Object   : access Gtk_Button_Record'Class;
            Data_Obj :        T_Obj_Acc) is
         pragma Unreferenced (Object);
      begin
         Austemp:=Float'Value(Get_Text(Data_Obj.Text));
         Set_Text(Data_Obj.Text,"Aussentemperature is to: " & Get_Text(
               Data_Obj.Text));
         Put("Aussentemperature is to: ");
         Put(Austemp);
         New_Line;
      exception
         when  others =>
            Put_Line("INPUT ERROR!");
            Set_Text(Data_Obj.Text,"Input Error!");
      end Btncallback;

      procedure Txtcallback (
            T : access Gtk_Entry_Record'Class) is
      begin
         Set_Text(T,"");
      end Txtcallback;

   begin
      Init;
      Gtk_New(Obj.Window);
      Set_Title(Obj.Window, "InputDialog");
      Set_Size_Request(Obj.Window,200,80);

      Gtk_New_Vbox(Obj.Zone, False,0);
      Add(Obj.Window, Obj.Zone);

      Gtk_New(Obj.Mylabel, "Aussentemperature eingeben: ");
      Pack_Start(Obj.Zone,Obj.Mylabel,True,True,0);

      Gtk_New(Obj.Text);
      Pack_Start(Obj.Zone,Obj.Text,True,True,0);

      Gtk_New(Obj.Button, "OK");
      Pack_End(Obj.Zone, Obj.Button, True, True,0);

      Show_All(Obj.Window);

      Button_Callback.Connect(Obj.Button, "clicked",
         Button_Callback.To_Marshaller(Btncallback'access),Obj);
      Text_Callback.Connect(Obj.Text,"grab_focus",Txtcallback'access,
         True);

      Main;

   end Window;
end Inputdialog;

-----------------------------------------------------------------------------------------------

with Inputdialog; use Inputdialog;
with ada.Float_Text_IO; use ada.Float_Text_IO;

procedure Testdialog is
begin

Inputdialog.Window;

end Testdialog;