Объединение программ на разных языках

#c# #java #c #winapi #ipc

#c# #java #c #winapi #ipc

Вопрос:

У меня есть три программы (одна на C WinAPI, другая на C # .NET и последняя на Java) с разными функциями. Я собираюсь выбрать один и реализовать функции двух других. Возможно ли их как-то объединить? Мне нужно, чтобы они были в одном графическом интерфейсе, в рамках одного процесса (по крайней мере, визуально). IPC не проблема.

Спасибо за все

Комментарии:

1. Пожалуйста, объясните далее, что вы подразумеваете под «слиянием».

2. Я действительно не уверен. Все, что позволило бы мне запустить его под одним графическим интерфейсом, графическим интерфейсом выбранной программы.

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

4. Конечно, это так. Мне просто нужна была какая-то отправная точка, какой бы общей она ни была.

Ответ №1:

Я думаю, что лучшее / самое простое, что вы могли бы сделать, это создать графический интерфейс только на C #, в клиентах Windows вы можете использовать Windows Forms или WPF, в веб-среде вы можете использовать ASP.NET Веб-формы или ASP.NET MVC.

во всех этих случаях, кроме MVC (Razor), у вас есть действительно хорошие инструменты для проектирования и настройки графического интерфейса в Visual Studio.

Ваш код C может быть заключен в библиотеку классов или, как вы говорите, доступен через какой-то IPC, если он должен запускаться как приложение, то же самое для Java, но если вы на 100% свободны писать и переписывать вещи, которые вы могли бы также представить для переноса кода Java на C , этоможет быть легко, сложно или невозможно в зависимости от того, что делает код Java.

в крайнем случае, если приложения C и Java должны оставаться разделенными и должны выполняться в фоновом режиме на том же или другом компьютере, и вы все еще хотите использовать их сервисы или методы из вашего графического интерфейса C #, как вы упомянули, IPC, вероятно, является способом, не уверен, что вы можете сделать в Windows с Java иIPC, конечно, java может предоставлять или использовать веб-службы XML.

Комментарии:

1. Спасибо, это было очень вдохновляюще, я буду инвестировать в это дальше. Да, я могу делать все, что угодно. Единственное, что имеет значение, — это результат.

Ответ №2:

Проблема, которую вы обнаружите, заключается в том, что у каждого есть своя модель процесса, и вам нужно либо заставить модели процессов сосуществовать, либо вам потребуется несколько взаимодействующих процессов (хотя пользователю не нужно их видеть). Например, с Java это может быть «король», или вы можете настроить какой-то подпроцесс в другом процессе, или вы можете настроить / отключить его модель процесса при каждом вызове. Какой подход лучше, частично зависит от сложности операций, которые вы будете выполнять на «гостевом» языке.

Однако главное заключается в том, что только один язык может управлять пользовательским интерфейсом — в общем, разные языковые интерфейсы не сосуществуют, и я сомневаюсь, что вы можете иметь, например, объект пользовательского интерфейса Java в графическом интерфейсе C #, по крайней мере, не рассматривая его как внешнее окно.

Комментарии:

1. ну, создание новых объектов пользовательского интерфейса, которые будут отправлять информацию этим процессам на других языках, является наименее острой проблемой. Функции, которые мне нужно реализовать, таковы: рисование графиков на основе данных, считываемых с RS-232 и других портов, отображение изображения с USB-камеры с последующим анализом изображения, прошивка ассемблерной программы на печатной плате собственного производства, сложная связь с этой печатной платой и т. Д.

2. Я подозреваю, что для этого лучше всего использовать отдельный процессный подход (возможно, IPC), поскольку вы будете использовать собственные драйверы ввода-вывода и тому подобное. Я никогда не пытался смешивать Java и C #, в частности, но я понимаю, что они слишком похожи, чтобы хорошо ладить на этом уровне (в одном и том же процессе).

Ответ №3:

Если вы говорите о лучшем языке для перезаписи программ, это полностью зависит от основной функции. Если вам это нужно в основном для хорошей интеграции с Windows, C # будет очевидным выбором. Если ваша основная идея состоит в том, чтобы сделать его кроссплатформенным, это имело бы наибольший смысл в Java.

Если вы говорите о том, чтобы запускать их вместе и использовать IPC, то да, это тоже возможно — вы можете использовать что угодно, от полностью разработанной инфраструктуры IPC до пользовательского протокола через сокеты на localhost. Здесь не должно быть слишком большой проблемы, хотя помните, что в зависимости от того, насколько велики части на других языках, их переписывание может стоить столько же времени (и это также снижает нагрузку на обслуживание).) Также существуют сложности с управлением графическими интерфейсами из других процессов, это можно сделать, передавая собственные идентификаторы canvas между процессами, но это трудно заставить работать должным образом, может быть не особенно безопасно и затрудняет понимание того, что происходит с точки зрения обслуживания.

Комментарии:

1. Это программа только для Windows. Да, переписывание — это вариант, но, учитывая, насколько сложны программы и, следовательно, насколько это отнимает много времени, я бы хотел избежать этого.