2009-02-28 1 views
3

У нас есть старое приложение, которое должно быть вызвано из других приложений. FORTRAN API. Через некоторое время они построили (C) обертку для FORTRAN API.Then Я сейчас строит C++ оболочки, с небольшим количеством обработки данных, для C API.Могу ли я получить кросс-платформенное кросс-технологическое решение?

Итак, я думаю, что это лучший способ создания API, который можно вызывать с любого языка программирования.

Теперь я планирую перенаправить RPC-сервер из моего C++ API. Тогда любой клиент, использующий любой язык программирования, может его вызвать.

Я нашел, что XML-RPC является хорошим. Но для подключения требуется HTTP-сервер.

Проблема в том, что приложения, которые называют наш API, являются настольными приложениями. И я обнаружил, что XML-RPC не может манипулировать сложными объектами.

SOAP хорошее решение? Может ли клиентская сторона быть легко реализована?

Итак, что является лучшим техническим решением для моей ситуации? Какую технологию я должен использовать?

комментарий: У меня нет разрешения на изменение API Fortran и API C. И мне нужен API C++, потому что я добавляю к нему новые методы и улучшаю код, чтобы пользователь мог легко вызвать методы.

С наилучшими пожеланиями,

ответ

2

Любой приличный язык имеет внешней функции API. Просто вызовите функции Fortran напрямую. В документации к компилятору рассказывается о том, как использование метода «Фортран» в общей библиотеке очень похоже на вызов C в общей библиотеке, за исключением того, что другие компиляторы могут нормализовать имена функций в нижнем регистре или нет или могут добавить символ подчеркивания. Некоторым FFI может потребоваться некоторый код оболочки C - например, Java, но многие могут просто использовать имя функции и типы параметров и имя загружаемой библиотеки.

В противном случае вы можете реализовать потоковый интерфейс для Fortran (чтение и запись на стандартный вывод), а также только ввод данных из него и обратно - я сделал это, когда вы быстро переносили интерактивные приложения ISPF Fortran на ПК.


Так как вы хотите, чтобы выставить C++ API и расширения, а не Fortran API, а затем посмотреть на SWIG, который автоматизирует процесс для различных языков, до тех пор, как C++ не слишком сложно.

+0

Я не могу напрямую вызвать функции Fortran, потому что теперь в моем C++ API мне нужно добавлять новые методы, манипулировать данными и возвращать их пользователю в известных типах данных и массивах. Так что я не могу сделать эти изменения в API FORTRAN, потому что у меня нет лицензии и исходного кода. – Abdo

0

SOAP, XML-RPC ect обычно используются для связи компьютера с компьютером, это то, что вы хотите? Или это все работает только на одном comuputer?

Если это только на одном компьютере, просто придерживаться C API, большинство систем можно использовать, что

Если вы смоделировали C API в качестве службы REST стиль, то вы можете также предоставлять услуги HTTP для приложений, которые могут 't использовать C API без, но только иметь одну систему для документа

2

Лучший способ оставить его в покое и просто использовать C API. фактически все языки программирования могут напрямую вызывать C API, поэтому нет причин создавать обертки, если модель программирования конкретного языка не имеет другого смысла.

Чтобы уточнить, что я имею в виду, посмотрите на GTK +. Это C API и может использоваться практически на любом языке. Обертки существуют в объектно-ориентированных языках, которые обеспечивают подход чистого ООП к API GTK +, поскольку он имеет смысл для этих языков, учитывая домен API.

Означает ли объектируемый интерфейс ваше приложение? Если нет, есть no Причина, по которой требуется создание оболочки C++.

Что касается RPC, то почему нет простого интерфейса передачи сообщений с общей памятью?

+0

Тот же самый резон, который я не могу назвать C непосредственно в качестве основной причины вызова fortran (см. Комментарий в первом ответе). Итак, да, объектный интерфейс имеет смысл для моего приложения. и что вы понимаете под простым интерфейсом передачи сообщений с разделяемой памятью и как я могу это сделать ??? – Abdo

+0

Большинство операционных систем предоставляют пул разделяемой памяти, который может распределить одно приложение, а другое может писать. Таким образом вы можете хранить сообщения или объекты в очереди. Его можно использовать аналогично другим механизмам RPC. – greyfade