Lazarus环境下Writeln无法正常工作的问题求助
Lazarus运行时错误216解决方法
问题描述
我是Lazarus新手,编写了这段基础代码:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs; type TForm1 = class(TForm) private // Hier können Sie private Mitglieder deklarieren, wenn benötigt. public // Hier können Sie öffentliche Mitglieder deklarieren, wenn benötigt. end; var Form1: TForm1; jame: string; implementation {$R *.lfm} begin writeln(jame); end.
运行时触发Runtime error 216,求解决办法。
错误原因
- 你创建的是GUI窗体应用,但错误地在单元的
implementation块顶级begin/end中执行代码——这不是GUI程序的正确执行入口,且writeln在GUI程序中没有默认控制台输出目标,直接调用会引发运行时错误。 - 变量
jame未初始化就直接使用,也可能加剧问题。
修复方案
方案1:GUI程序正确写法(推荐)
GUI程序的初始化逻辑应放在窗体的OnCreate事件中,用消息框代替控制台输出:
- 双击设计界面的窗体,自动生成
FormCreate事件处理函数。 - 修改代码如下:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); // 新增事件声明 private // Hier können Sie private Mitglieder deklarieren, wenn benötigt. public // Hier können Sie öffentliche Mitglieder deklarieren, wenn benötigt. end; var Form1: TForm1; jame: string; implementation {$R *.lfm} // 实现事件处理函数 procedure TForm1.FormCreate(Sender: TObject); begin jame := 'Hello Lazarus'; // 先初始化变量 ShowMessage(jame); // GUI程序用消息框展示内容 end; end.
方案2:改为控制台应用(需控制台输出时)
如果确实需要用writeln输出:
- 打开项目设置:
Project -> Project Options - 在
Target选项卡中,把Application type改为Console application - 简化代码(控制台程序不需要窗体单元):
program Project1; {$mode objfpc}{$H+} uses SysUtils; var jame: string; begin jame := 'Hello Console'; writeln(jame); readln; // 暂停窗口,方便查看输出 end.
内容的提问来源于stack exchange,提问作者ayan kulber
相关产品推荐
相关产品推荐

