2015-10-22 15 views
11

Sto lavorando a un componente che deve essere condiviso tra Delphi e C++ Builder, quindi sto utilizzando Pascal come lingua franca. Poiché non ho Delphi sul mio computer a casa, ho prima creato il componente nell'IDE di Lazarus. Ora io "porting" a Delphi e trovato un problema stupefacente sintassi:Sintassi di assegnazione degli eventi in diversi dialetti Object Pascal

Questo compila con FPC (ma non Delphi):

FSync.FSyncMethod := @SyncCheckInput; 

Questo compila con Delphi (ma non FPC):

FSync.FSyncMethod := SyncCheckInput; 

Come posso condividere un'unità tra Lazarus e Delphi nonostante questa divergenza sintattica?

+0

"* mancanza di un meccanismo di sincronizzazione comune (e portatile) *" - FreePascal imita molte delle classi core di Delphi, include 'TThread' e il suo metodo' Synchronize() ': [FreePascal Wiki | Tutorial applicativo multithread | La classe TThread] (http://wiki.freepascal.org/Multithreaded_Application_Tutorial#The_TThread_Class) –

+0

@RemyLebeau Avevo bisogno di un meccanismo di sincronizzazione non bloccante e l'ho ottenuto con (il thread-safe) 'Application.QueueAsyncCall' in Lazarus e' PostMessage' a una finestra invisibile (tramite 'AllocateHWnd') in Delphi. Naturalmente, ho usato la classe 'TThread', ma' Synchronize' non è stata utile nel mio caso a causa della sua funzione rendezvous. Grazie comunque :) – Wolf

+0

'TThread' ha anche un metodo' Queue() 'asincrono. –

risposta

15

Inserire questo all'inizio delle tue unità:

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

Questo indicherà FreePascal di usare il dialetto Delphi per compilare l'unità. Delphi ignorerà lo {$MODE DELPHI} directive perché FPC non è definito.

È quindi possibile utilizzare questo

FSync.FSyncMethod := SyncCheckInput; 

per impostare gli eventi in modo dinamico.

+0

Questo è il tipo di soluzione che speravo! – Wolf

Problemi correlati