Event assignment syntax in different Object Pascal dialects
我正在开发一个应在Delphi和C Builder之间共享的组件,所以我使用Pascal作为通用语言。由于我家里的计算机上没有Delphi,因此我首先在Lazarus IDE中创建了该组件。现在,我将其"移植"到Delphi,发现了一个令人惊讶的语法问题:
这是使用FPC(而不是Delphi)进行编译的:
1
| FSync.FSyncMethod := @SyncCheckInput; |
这是用Delphi编译的(但不是FPC):
1
| FSync.FSyncMethod := SyncCheckInput; |
尽管存在这种语法差异,我如何在拉撒路和delphi之间共享一个单位?
- "缺乏通用(可移植的)同步机制"-FreePascal模仿了Delphi的许多核心类,包括TThread及其Synchronize()方法:多线程应用程序教程| TThread类
-
@RemyLebeau我需要一个非阻塞同步机制,并在Lazarus中使用(线程安全的)Application.QueueAsyncCall将其获取,并将其通过Delphi中的PostMessage传递到一个不可见的窗口(通过AllocateHWnd)。当然,我使用了TThread类,但是Synchronize在我的情况下没有帮助,因为它具有集合点功能。不管怎么说,还是要谢谢你 :)
-
TThread也具有异步Queue()方法。
-
@RemyLebeau恐怕在Delphi 4中没有必须使用的Queue方法(我不确定,我现在没有D4或其文档)。因此,我最好从问题中删除便笺,或者更具体地说明我使用的版本?
-
您没有说您正在使用哪个Delphi / FreePascal版本。不,Queue()在D4中不存在。 FreePascal模仿D7。
-
我删除了有关同步机制的注释。顺便说一句:TThread.Queue当前在LCL中不存在。
在单位的开头插入此内容:
1
| {$IFDEF FPC}{$MODE DELPHI}{$ENDIF} |
这将指示FreePascal使用Delphi方言来编译单元。由于未定义FPC,Delphi将忽略{$MODE DELPHI}指令。
然后您可以使用此
1
| FSync.FSyncMethod := SyncCheckInput; |
用于动态设置事件。