Что лучший способ состоит в том, чтобы сделать обмен данных приложения в Delphi без сокетов?

Языки на компьютерах сравниваются как двоичные, потому что все они предназначены для машины, которая использует двоичные данные для представления информации. Они были разработаны с использованием схожей логики и с похожими целями. Английский язык не был разработан логически, предназначен для описания алгоритмов, а человеческий мозг (аппаратное обеспечение, на котором он работает) не основан на двоичном коде. Это инструменты, предназначенные для различных задач.

6
задан Argalatyr 18 June 2009 в 13:17
поделиться

8 ответов

У вас, вероятно, есть несколько вариантов.

Помимо того, что у вас уже есть:
DDE
Файлы с отображением в память (MMF)
MailSlots

Я бы, вероятно, выбрал Pipes или MMF.

Вы можете скачать несколько бесплатных компонентов MMF, У Деборы Пейт есть набор бесплатных классов, которые вы можете использовать. MapFiles.zip

Проверьте почтовые ящики на сайте Торри .

Окончательное решение может зависеть от количества, размера и частоты передачи данных, которые определяют, какой вариант вы выберете.

5
ответ дан 8 December 2019 в 18:41
поделиться

Я бы посоветовал использовать COM в этой ситуации. (Внимание: не COM +, не ActiveX, не OLE; COM, только COM.)

Начиная с Delphi 7 (или более ранней версии, я не уверен), это легко сделать, добавив в проект библиотеку типов, и объект автоматизации.

Преимущества в том, что он довольно широко поддерживается как в Delphi (редактор библиотеки типов имеет все необходимое, и обновляет ваш код, а внутренние компоненты COM и регистрация обслуживаются из модуля ComServ), так и вне Delphi (Я использую его в ряде проектов для взаимодействия со всеми видами приложений: проекты C ++, документы Word и Excel с использованием VBA, oldskool ASP ...).

Единственным недостатком, с которым я столкнулся, могут быть проблемы с потоками в обычных приложениях , простой CoInitialize (nil); при запуске приложения подойдет, в более сложных приложениях вам нужно подумать о «многопоточности» или использовать бесплатную многопоточность и выполнить собственную блокировку. (Что в некоторых случаях вы уже делали.)

4
ответ дан 8 December 2019 в 18:41
поделиться

Еще одна альтернатива, которая очень проста в реализации, - использовать базу данных для передачи информации.

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

2
ответ дан 8 December 2019 в 18:41
поделиться

Вы можете использовать простые файлы: одна сторона записывает в них, другая читает. Если вам нужна двусторонняя связь, просто используйте два файла, по одному для каждого направления.

Конечно, это не очень высокая производительность.

2
ответ дан 8 December 2019 в 18:41
поделиться

Еще одно мое голосование за именованные каналы, за обмен данными. Мне они нравятся немного больше, чем файлы mmap, поскольку API-интерфейсы win32 pipe предлагают вам несколько хороших вариантов прямо из коробки: синхронизация / асинхронность, поток байтов или пакеты сообщений, простые вызовы ReadFile / WriteFile. Все это вы можете сделать сами с помощью mmaps ... но каналы уже есть ...

И вы можете контролировать доступ с помощью атрибутов безопасности - что невозможно с WM_CopyData. Это может быть проблемой не сразу ... но может быть удобно иметь такую ​​возможность, даже если вам все равно, кто отправляет сообщения вашего приложения. Для меня это было полезно, когда появилась Vista, и внезапно пользовательские приложения запускались в отдельном сеансе с моей службой. Хорошо, что настройка атрибутов безопасности была единственным, что нужно было, чтобы все снова заработало.

Для "

1
ответ дан 8 December 2019 в 18:41
поделиться

Не используйте COM, слишком много накладных расходов (варианты), и вы должны зарегистрировать свои .dll или .exe (и это дает много странных проблем с установкой + обновлением).

Я должен перейти на MMF, я использую его для связи со службами Windows. Для этого я использую следующий TGpMessageQueueReader и писатель: http://17slon.com/gp/gp/gpsync.htm

0
ответ дан 8 December 2019 в 18:41
поделиться

Разве это не то, что RemObjects хорошо умеет? Bri

-1
ответ дан 8 December 2019 в 18:41
поделиться

Если вы хотите передавать данные, вызывать функции и т. Д., Используйте COM, однако при большом количестве вызовов помните, что COM работает медленно. Также вам может потребоваться зарегистрировать приложение в «xxx.exe / Regserver», чтобы оно заработало.

0
ответ дан 8 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: