不同 Object Pascal 方言中的事件分配语法

Event assignment syntax in different Object Pascal dialects

我正在开发一个应该在 Delphi 和 C++Builder 之间共享的组件,所以我使用 Pascal 作为 通用语言。因为家里电脑上没有Delphi,所以先在LazarusIDE中创建组件。现在我 "ported" 它到 Delphi 并发现了一个惊人的语法问题:

这与 FPC 编译(但不是 Delphi):

FSync.FSyncMethod := @SyncCheckInput;

使用 Delphi(但不是 FPC)编译:

FSync.FSyncMethod := SyncCheckInput;

尽管存在句法差异,我如何在 Lazarus 和 Delphi 之间共享一个单元?

在你的单元开头插入:

{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}

这将指示 FreePascal 使用 Delphi 方言来编译单元。 Delphi 将忽略 {$MODE DELPHI} directive 因为 FPC 未定义。

然后您可以使用这个

FSync.FSyncMethod := SyncCheckInput;

用于动态设置事件。