2015-10-22 18 views
11

私はDelphiとC++ Builderの間で共有されるべきコンポーネントに取り組んでいるので、私はというリンガフランカとしてパスカルを使用しています。私は自宅のコンピュータにDelphiをインストールしていないので、まずLazarus IDEでコンポーネントを作成しました。今、私のDelphiにも "移植" と驚異的な構文の問題を発見した:異なるオブジェクトパスカル方言のイベント割り当て構文

これは、FPC(ただし、デルファイ)でコンパイル:

FSync.FSyncMethod := @SyncCheckInput; 

これは、Delphi(ただし、FPC)でコンパイル:

FSync.FSyncMethod := SyncCheckInput; 

この構文上の相違にもかかわらず、LazarusとDelphi間でユニットを共有するにはどうすればよいですか?

+0

"FreePascalはDelphiのコアクラスの多くを模倣しています.TThreadとその' Synchronize() 'メソッドを含みます:[FreePascal Wiki |マルチスレッドアプリケーションチュートリアル| TThreadクラス](http://wiki.freepascal.org/Multithreaded_Application_Tutorial#The_TTread_Class) –

+0

@RemyLebeau私は非ブロッキング同期メカニズムが必要でした。スレッドセーフである 'Application.QueueAsyncCall'をLazarusで取得し、 PostMessage'をDelphiの(AllocateHWnd経由で)非表示ウィンドウに追加します。もちろん、私は 'TThread'クラスを使いましたが、' Synchronize'は私の場合、ランデブーな機能のために役に立ちませんでした。とにかくありがとう:) – Wolf

+0

'TThread'には非同期' Queue() 'メソッドもあります。 –

答えて

15

あなたのユニットの先頭にこれを挿入します。

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

これは、ユニットをコンパイルするためにDelphiの方言を使用するFreePascalとを指示します。 FPCが定義されていないため、Delphiは{$MODE DELPHI} directiveを無視します。

その後、イベントを動的に設定するために、この

FSync.FSyncMethod := SyncCheckInput; 

を使用することができます。

+0

それは私が望んでいた解決策の一種です! – Wolf

関連する問題