PostMessage / SendMessage в кроссплатформенном Delphi? - PullRequest
0 голосов
/ 29 марта 2011

Для кроссплатформенной разработки я не уверен, что требуется для создания кросс-платформенного кода Delphi, который использует вызовы PostMessage и SendMessage для внутрипроцессного и межпроцессного взаимодействия, так как информации о новой библиотеке времени выполнения для Delphi мало.

В Интернете существует довольно много примеров кода Delphi, использующих очередь сообщений Windows для задач программирования (например, в области обмена потоками), которые могут стать бесполезными для кроссплатформенных разработчиков.

Насколько вероятно, что не будет слоя эмуляции, который отображал бы старый специфичный для работы код отправки сообщений в кроссплатформенное решение?Должны ли разработчики приложений начинать с обзоров существующего кода с новыми реализациями обмена сообщениями, которые лучше подходят для кроссплатформенной работы?

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

PostMessage и SendMessage являются специфичными для Windows - они являются частью Windows API. Если ваша программа использует их, то она не кроссплатформенная. Возможно, вам следует переписать код, который использует эти функции.

2 голосов
/ 29 марта 2011

Другая операционная система может вообще не иметь очереди сообщений. Специфичный для Windows код должен быть изолирован или удален для создания кроссплатформенных приложений. Одна из причин, по которой они написали библиотеку CLX для Kylix, заключается в том, что VCL настолько привязан к Windows, что его нелегко преобразовать в кроссплатформенный libray.

0 голосов
/ 30 марта 2011

Я подозреваю, что вы могли бы реализовать свой собственный объект Queue, который мог бы быть реализован, в зависимости от платформы.В Win32 он может переносить дескриптор основного окна Win32, а на какой-то другой платформе могут потребляться некоторые другие ресурсы.

Что если вы начнете прямо сейчас, сократив код конкретной платформы, до определенных модулей, которые инкапсулируютфункциональность, которая вам нужна.Это означает, что вам следует избегать использования PostMessage / SendMessage в качестве механизма, который вы непосредственно используете.

Для начала представьте, что PostMessage и SendMessage не существуют, и вам нужен способ создать очередь.Например, вы можете использовать сокеты или именованные каналы, которые существуют на большинстве платформ.Вам нужно было бы написать немного больше кода, чтобы сделать это таким образом.

В библиотеках QT они предоставляют свои собственные функции, чтобы помочь авторам приложений переписывать свои приложения C ++ для использования своих функций вместо функций Win32, поэтомуВы также можете попробовать этот подход.Функция QT postEvent является примером этого.QT также предоставляет сигналы и слоты, и это более идиоматический способ создания уведомлений в их инфраструктуре.

Возможно, способ создания уведомлений в любой новой платформе с кроссплатформенным Delphi может содержать совершенно новый способ.делать это.Это моя надежда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...