问题 不同Object Pascal方言中的事件赋值语法


我正在研究一个应该在Delphi和C ++ Builder之间共享的组件,所以我使用Pascal作为 通用语。因为我家里的计算机上没有Delphi,所以我首先在Lazarus IDE中创建了该组件。现在我将它“移植”到Delphi,发现了一个令人惊讶的语法问题:

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

FSync.FSyncMethod := @SyncCheckInput;

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

FSync.FSyncMethod := SyncCheckInput;

尽管有这种语法上的分歧,我如何在Lazarus和Delphi之间共享一个单元?


8930
2017-10-22 12:25


起源

“缺乏通用(和便携)的同步机制“ - FreePascal模仿Delphi的许多核心类,包括 TThread 和它的 Synchronize() 方法: FreePascal Wiki |多线程应用程序教程| TThread类 - Remy Lebeau
@RemyLebeau我需要一个非阻塞同步机制,我得到它(线程安全) Application.QueueAsyncCall 在拉撒路和 PostMessage 到一个看不见的窗口(通过 AllocateHWnd)在德尔福。当然,我用的是 TThread 上课,但是 Synchronize 由于它的会合功能,在我的情况下没有帮助。不管怎么说,还是要谢谢你 :) - Wolf
TThread 也有一个异步 Queue() 方法。 - Remy Lebeau
@RemyLebeau我担心没有 Queue Delphi 4中的方法,我必须使用(我不确定,我现在没有D4或其文档)。所以我最好从问题中删除旁注或者更具体地说我正在使用的版本? - Wolf
你没有说你正在使用哪个Delphi / FreePascal版本。没有, Queue() 在D4中不存在。 FreePascal模仿D7。 - Remy Lebeau


答案:


在单位的开头插入:

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

这将指示FreePascal使用Delphi方言编译单元。德尔福会忽略它 {$MODE DELPHI} 指示 因为 FPC 没有定义。

然后你可以使用它

FSync.FSyncMethod := SyncCheckInput;

用于动态设置事件。


15
2017-10-22 12:30



这就是我希望的那种解决方案! - Wolf