powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / API у десктопного приложения - как сделать?
25 сообщений из 30, страница 1 из 2
API у десктопного приложения - как сделать?
    #39547728
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Программа написана на Delphi XE8
У меня спрашивают: "Если ли API у вашей программы" ? Ответ: нет

Возникает вопрос: Как сделать API у десктопного приложения? В виде DLL или COM/OLE/ActiveX-технологии или может быть передавать через IP/порт ?
Может сейчас есть более современные технологии?

Приложения, которые будут получать/передавать данные в программу - это могут быть любые приложения, написанные на чем угодно.
Передавать в программу нужно будет строки и возможно изображения (хотя изображение можно представить в виде текста).

Какие будут идеи?

Заранее благодарен.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547729
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто импорт-экспорт данных из программы сделать, например, в json-xml? Иногда под апи именно это подразумевают.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547733
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а это мысль!
Только после сохранения xml на диск надо как-то моей программе автоматически затащить данные из xml-файла. А как программа узнает, что xml для импорта подготовлен? Это уже конечно второй вопрос.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547735
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Кстати, а это мысль!
Только после сохранения xml на диск надо как-то моей программе автоматически затащить данные из xml-файла. А как программа узнает, что xml для импорта подготовлен? Это уже конечно второй вопрос.

В программе, в настройках, хранить путь к папке и расширение файла (.xml или другое).
Опрашивать при запуске + периодически\подписаться на события файловой системы (создание файла, например).
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547736
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, думал уже об этом, но не хотелось бы нагружать программу дополнительным мониторингом ожидания появления xml-файлов в опред.папке. А подписка на события, наверное, не будет работать, если папка лежит на FAT-32 (например на флешке). Для подписки на события ведь нужен NFTS?
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547738
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да какие подписки -- тупо проверять наличие файлов в папке по нажатию на кнопки или через какой-то промежуток времени. А потом эти файлы перемещать в папку с очередью на обработку - обработанными - ошибочными.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547744
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну похоже, что так и придется.

Только
Код: pascal
1.
if FileExists(файл)=true

еще не означает, что файл существует и готов для импорта. Файл может быть не дописан до конца другой программой (лежать огрызок). Например, если вы в момент копирования длинного фильма проверите FileExists, то выдаст true, но файл еще до конца не скопирован.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547746
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52,

так проверь - занят он еще или уже нет.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547754
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Как сделать API у десктопного приложения?
Зависит от того, кто и как будет использовать.
Если это:
- .Net / скрипты на WSH (JScript / VBS) / Office (VBA), то лучше сделать COM, причем с Dispatch интерфейсами
- скрипты cmd / bash - лучше сделать CLI (command line interface).
- PowerShell нужен модуль с Cmdlets (ну или WMI объект)
- Java / C / ... какая-то экзотика (Python/...) лучше сделать DLL, и binding для соответсвующего языка - практически все они так или иначе поддерживают вызов из Dll

m52передавать через IP/порт ?
От вас ведь просят API, а не протокол обмена (который, во-первых, надо еще правильно реализовать и проверить, а во-вторых, вы в какой-то момент можете захотеть изменить).

m52Какие будут идеи?
Я бы сделал для начала минимальный по затаратам, но максимальный по распространенности вариант - DLL с парой функций. Сам протокол обмена (через сокеты, разделяемую папку, named pipe, shared папку, ... ) скрыть за этой библиотекой.
Если будут потом просить binding к конкретному языку / среде - делать уже по запросу (как обертку над этой dll или же напрямую, используя внутреннее API самого протокола).
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547761
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Только
Код: pascal
1.
if FileExists(файл)=true


еще не означает, что файл существует и готов для импорта. Файл может быть не дописан до концаНу так сказали же. Перед обработкой твоя программа "перемещает файл в свою папку".
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547796
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно в программе использовать TTCPServer/TIdTCPServer и принимать различные команды по сети.
Или даже TIdHttpServer.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547799
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Как сделать API у десктопного приложения?

Сначала надо решить какие функции твоего приложения должны быть доступны левым приложениям
через это API и какие приложения это могут быть. Если, например, это 1С, то выбора нет:
OLE Automation Server, другого эта штука не умеет. Если это какая-то уэб-хренотень, то
SOAP сотоварищи. И т.д. и т.п.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547809
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовать плагинную систему на основе COM interface без регистрации com объектов.
В принципе можно прикрутить любой язык программирования.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547817
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Здравствуйте,

Программа написана на Delphi XE8
У меня спрашивают: "Если ли API у вашей программы" ? Ответ: нет

Возникает вопрос: Как сделать API у десктопного приложения? В виде DLL или COM/OLE/ActiveX-технологии или может быть передавать через IP/порт ?
Может сейчас есть более современные технологии?

Приложения, которые будут получать/передавать данные в программу - это могут быть любые приложения, написанные на чем угодно.
Передавать в программу нужно будет строки и возможно изображения (хотя изображение можно представить в виде текста).

Какие будут идеи?

Заранее благодарен.
Сильно зависит от того, кто будет пользоваться твоим API.
Например, сервис обратится к тебе как к СОМ серверу, ты запускаешься под тем же пользователем со всеми вытекающими (без доступа к рабочему столу и т.п.).
Если есть возможность - реализуйся как автономная длл (с дублированием кода). Или как вебсервис, но придется решить вопрос с первоначальным запуском и подчисткой гуя (диалогов и т.п.)
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547917
оповещение программы (например, о том, что входной файл для неё готов и нужно его обработать) можно сделать через user windows message, которое главное окно программы должно обрабатывать

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

файлы при этом лучше использовать отображаемые в память (mmf) - так можно полностью избежать физической записи этих файлов на диск

рассматривая вариант c .dll (скорее, с экспортируемыми вашим .exe функциями), следует помнить о невозможности такого взаимодействия между 32-битными и 64-битными процессами
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547956
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиенты у моей CRM-программы разные и я не знаю, кто и как хочет взаимодействовать с программой. Кто-то хочет,чтобы программа в 1С что-то отправляла, кто-то хочет со своего сайта клиентов заносить в программу. Поэтому мне сложно понять, какой API будет востребованней.

Пока рассматриваю или DLL или COM.

авторрассматривая вариант c .dll (скорее, с экспортируемыми вашим .exe функциями), следует помнить о невозможности такого взаимодействия между 32-битными и 64-битными процессами

У меня приложение 32-битное. Это значит, что стороннее 64-битное приложение не сможет использовать мою DLL ?
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547957
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйтеили программа-клиент может запустить копию вашей программы с параметрами ком. строки, тоже хотел про этот вариант сказать.

а то, сейчас API- модное слово, конечный потребитель не знает что это такое, но ему кто-то сказал, что это необходимо. как же, программа без апи, это плохо!
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547961
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52У меня приложение 32-битное. Это значит, что стороннее 64-битное приложение не сможет использовать мою DLL ?Не сможет
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547985
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Клиенты у моей CRM-программы разные и я не знаю, кто и как хочет взаимодействовать с
программой.

Ну так выясни. Устрой аукцион: кто за какой способ взаимодействия больше заплатит.

YuRockНе сможет

Сможет, если это будет standalone COM server, но это тот ещё геморрой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39547989
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если под приложением есть БД, то 2 варианта.
1) Если надо что-то делать через API без запуска приложения, то пишется служба и выбрасывается API в виде SOAP + RESTfull
2) Если достаточно, когда приложение запущено, то делается то же самое только в приложении.

Кстати, самый главный вопрос. А что будет в API ?
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39548001
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteЕсли под приложением есть БД, то 2 варианта.

Не, если под приложением есть БД, то никакого API вообще не требуется, достаточно просто
документировать таблицы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39548245
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52 Возникает вопрос: Как сделать API у десктопного приложения?

Конечно, можно в программе реализовать web-сервисы.
Но если по-простому, то предлагаю такое решение:

1) как уже говорили выше, для передачи данных вашей программе можно выделить какую-то папку и класть туда json/xml/csv/sqlite/любые другие файлы с оговоренной структурой. Папку можно не вшивать жестко в EXE-шник, а например задавать в настройках программы и хранить в реестре

2) точно так же ваша программа может отдавать файлами в ту же папку

3) далее, надо сообщить вашей программе, что есть файлы для обмена.
И тут предлагаю отлавливать windows - сообщения, отправляемые по SendMessage .
Можно отправить либо просто числовой код команды, либо вообще WM_COPYDATA с данными.
Кстати, SendMessage позволяет вернуть код
И еще, можно для вызова SendMessage сторонними программами, например из batch-скрипта, можно написать небольшую консольную утилитку, транслирующую параметры командной строки в параметр для SendMessage и возвращающую кодом возврата результат вызова функции.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39548579
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52Приложения, которые будут получать/передавать данные в программу - это могут быть любые приложения, написанные на чем угодно.
Передавать в программу нужно будет строки и возможно изображения (хотя изображение можно представить в виде текста).

Если это будет android приложение (написанное на Xamarin или Java или FireMonkey) которое с телефона должно передать изображение или строки в вашу программу, то варианты через шары, COM, Dll можно забыть. Только SOAP или REST. Или в виде отдельного сервиса или встраивать в ваше приложение непосредственно. Технологии уходят вперед, пора уже задумываться о SOA...
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39551292
amsdev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовать RealThinClient SDK, с ним очень легко встроить в приложение http сервер который будет принимать команды АПИ в виде JSON.
...
Рейтинг: 0 / 0
API у десктопного приложения - как сделать?
    #39551311
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amsdevс ним очень легко встроить в приложение http сервер который будет принимать команды АПИ в
виде JSON.

Останется один вопрос: зачем мучиться с API вообще, если для его работы всё равно придётся
иметь запущенное приложение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / API у десктопного приложения - как сделать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]