2015-10-22 13 views
11

Tôi đang làm việc trên một thành phần cần được chia sẻ giữa Delphi và C++ Builder, vì vậy tôi đang sử dụng Pascal là lingua franca. Bởi vì tôi không có Delphi trên máy tính của tôi ở nhà, đầu tiên tôi đã tạo ra thành phần trong IDE Lazarus. Bây giờ tôi "chuyển" nó để Delphi và tìm thấy một vấn đề đáng kinh ngạc cú pháp:Cú pháp gán sự kiện trong các phương ngữ đối tượng Pascal khác nhau

này biên dịch với FPC (nhưng không Delphi):

FSync.FSyncMethod := @SyncCheckInput; 

này biên dịch với Delphi (nhưng không FPC):

FSync.FSyncMethod := SyncCheckInput; 

Làm thế nào tôi có thể chia sẻ một đơn vị giữa Lazarus và Delphi bất chấp sự phân kỳ cú pháp này?

+0

"* thiếu cơ chế đồng bộ chung (và di động) *" - FreePascal bắt chước nhiều lớp lõi của Delphi, bao gồm 'TThread' và phương thức' Synchronize() ': [FreePascal Wiki | Hướng dẫn ứng dụng đa luồng | Lớp TThread] (http://wiki.freepascal.org/Multithreaded_Application_Tutorial#The_TThread_Class) –

+0

@RemyLebeau Tôi cần một cơ chế đồng bộ hóa không bị chặn và tôi đã nhận nó với (Application -QueueAsyncCall' thread-safe) trong Lazarus và ' PostMessage' đến một cửa sổ vô hình (thông qua 'AllocateHWnd') trong Delphi. Tất nhiên, tôi đã sử dụng lớp 'TThread', nhưng' Synchronize' không hữu ích trong trường hợp của tôi vì tính năng hẹn hò của nó. Thanks anyway :) – Wolf

+0

'TThread' cũng có một phương thức' Queue() 'không đồng bộ. –

Trả lời

15

Phụ trang này vào lúc bắt đầu của các đơn vị của bạn:

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

này sẽ hướng dẫn FreePascal sử dụng phương ngữ Delphi để biên dịch các đơn vị. Delphi sẽ bỏ qua {$MODE DELPHI} directiveFPC không được xác định.

Sau đó bạn có thể sử dụng

FSync.FSyncMethod := SyncCheckInput; 

để thiết lập các sự kiện tự động.

+0

Đó là loại giải pháp mà tôi đã hy vọng! – Wolf

Các vấn đề liên quan