You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,求解决办法。


错误原因

  1. 你创建的是GUI窗体应用,但错误地在单元的implementation块顶级begin/end中执行代码——这不是GUI程序的正确执行入口,且writeln在GUI程序中没有默认控制台输出目标,直接调用会引发运行时错误。
  2. 变量jame未初始化就直接使用,也可能加剧问题。

修复方案

方案1:GUI程序正确写法(推荐)

GUI程序的初始化逻辑应放在窗体的OnCreate事件中,用消息框代替控制台输出:

  1. 双击设计界面的窗体,自动生成FormCreate事件处理函数。
  2. 修改代码如下:
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输出:

  1. 打开项目设置:Project -> Project Options
  2. 在Target选项卡中,把Application type改为Console application
  3. 简化代码(控制台程序不需要窗体单元):
program Project1;

{$mode objfpc}{$H+}

uses
  SysUtils;

var
  jame: string;

begin
  jame := 'Hello Console';
  writeln(jame);
  readln; // 暂停窗口,方便查看输出
end.

内容的提问来源于stack exchange,提问作者ayan kulber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:42:43