Как общаться между c # и приложением Delphi? - PullRequest
3 голосов
/ 14 апреля 2011

Мне нужно связать мое приложение (Delphi + MS SQL Server: D с этого момента) с другим приложением (c # + SQL Server: C с этого момента).

C имеет минималистичного пользователя Windows Formsинтерфейс и большая работа, которую он выполняет, это подключение к КПК, отправляющим и получающим данные от них.

Таким образом, они считают, что пользовательский интерфейс для пользовательского интерфейса C удален, и они просто сохраняют код, необходимый для связи с БД ис КПК.

Так что мне нужно, чтобы C мог говорить с D и наоборот.

D к C: Так или иначе, на некоторых событиях (таких как TButton.OnPress) D отправит некоторые данные на CПоэтому мне нужно вызывать методы, предоставляемые C.

C для D: D должен реагировать на некоторые действия, выполняемые C. Поэтому C будет вызывать некоторые методы, предоставляемые D. Даже если на первом этапе D будетпросто "выставить хранимую процедуру".

Я никогда не делал ничего подобного.Что делать?D в настоящее время является одним exe (win32).

Какой метод вы предлагаете?

Ответы [ 10 ]

2 голосов
/ 14 апреля 2011

Есть множество вариантов. Сокеты, пожалуй, самые надежные, но если оба приложения работают на одном компьютере, вы можете использовать оконные сообщения (WndProc и друзья) или именованные каналы.

2 голосов
/ 14 апреля 2011

Если пользовательский интерфейс в C будет удален, я бы порекомендовал обернуть C в один COM-объект, который вы можете прозрачно использовать из Delphi.

1 голос
/ 14 апреля 2011

Я работаю с подобным приложением, где я использую свое существующее приложение Delphi для связи с моим новым приложением .NET.Я обернул приложение в DLL и использовал открытые функции для вызова из .NET, а также процедуру обратного вызова для передачи формы .NET в Delphi.

1 голос
/ 14 апреля 2011

Если они оба используют одну и ту же базу данных, вы можете использовать ее как канал между ними.

В одном приложении записать в конкретную таблицу, а в другом «прослушать» эту таблицу, опрашивая ее через регулярные интервалы, удаляя любое уже обработанное «сообщение».

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

1 голос
/ 14 апреля 2011

RemObjects SDK изначально поддерживает программы Delphi и .NET. Это дополнительный слой над чем-то более низким, но он может упростить задачу.

1 голос
/ 14 апреля 2011

Я думаю, вы можете использовать сокеты.Либо с вашим собственным протоколом, либо вы можете использовать веб-сервисы, но последнее довольно сложно.В Delphi есть импортер WSDL, в C ++ есть библиотека gSOAP .

0 голосов
/ 16 сентября 2015

Вы можете преобразовать свой код C # в DLL (библиотека классов).Установите опцию «Сделать сборку COM-Visible».Создайте новый сертификат (если требуется) и подпишите свой код.

Зарегистрируйте свою C # DLL в Windows: "RegAsm -tlb -codebase YourLibrary.dll".

В Delphi импортируйте свою библиотеку (Компонент -> Импортировать компонент, выберите «Библиотека типов», выберите свою библиотеку, «Создать модуль»).

В Delphi используйте вашу библиотеку C # так же, как вы используете объекты COM (например, OLE Automation или ActiveX).

Вы можете создать интерфейс (ы) для связи между Delphi и C #.Если вы сделаете это, то сможете легко реализовать двустороннюю связь между вашим кодом в Delphi и вашим кодом на C #.

0 голосов
/ 19 апреля 2011

Моя инфраструктура может работать как в Delphi, так и в Visual Studio и, таким образом, обеспечивает связь между приложениями Win32 и .NET через необработанные сокеты TCP.

0 голосов
/ 15 апреля 2011

Вы можете использовать ZeroMQ. Это бесплатный стек, ориентированный на сообщения.

0 голосов
/ 14 апреля 2011

В качестве одного из вариантов я могу предложить наш MsgConnect , который представляет собой облегченное промежуточное программное обеспечение, ориентированное на сообщения, которое легко решит вашу проблему. MsgConnect доступен для Delphi и C #. RemObjects SDK, упомянутый выше, также является отличным продуктом, хотя, возможно, немного излишним для вашей простой задачи.

...