Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 943

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Ни как не могу понять с какой стороны приступить к решению задачи. есть Приложение, написанное мной на Delphi. Я хочу для этого приложения написать API. С чего начать? Если вопрос глупый прошу не пинать, а разъяснить ситуацию, спасибо ))

Казаков Николай Константинович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Казаков Николай Константинович (статус: 1-ый класс)
Вопрос отправлен: 10 февраля 2012, 14:30
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 12 февраля 2012, 16:08; участников в обсуждении: 6.
bugmenot

bugmenot (статус: 3-ий класс), 10 февраля 2012, 15:17 [#1]:

Цитата (Казаков Николай Константинович):

Я хочу для этого приложения написать API

Просто хочется или есть в этом необходимость?
Что, я хуже людей? Подите на Кузнецкий, все в лаковых у всех API.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Казаков Николай Константинович

Казаков Николай Константинович (статус: 1-ый класс), 10 февраля 2012, 15:26 [#2]:

Странный вопрос. Над проектом работаю в свободное от основной работы время. Есть желание разобраться. Если есть ссылки проясняющие суть моего вопроса прошу поделиться
mirt.steelwater

mirt.steelwater (статус: Посетитель), 10 февраля 2012, 18:05 [#3]:

API - это набор функций для работы с вашим приложением.
Сделайте библиотеку, в списке экспорта оформите основные функции, которые внешний пользователь должен выполнять в вашем приложении (ввести текст, открыть файл, отправить сообщение по сети и т.п.)
Ⓐ свобода сопротивление солидарность
amber

amber (статус: 1-ый класс), 10 февраля 2012, 19:34 [#4]:

Пожалуй самый простой в плане реализации API – использование сообщений Windows. Дело в том, что сообщения выше WM_USER системой не используются и программист может задействовать их в личных целях (например для того же API). Данный механизм гораздо практичней, поскольку не требует дополнительных DLL. Программа свой API ни когда не «потеряет». Приведу пример, простейшей реализации данного механизма. Добавьте в Вашу программу следующий код:

const WM_MYMESSAGE=WM_USER+1; //Ваше личное сообщение
...
type
  TForm2 = class(TForm)
...
    Procedure MyMessageEvent(var msg:TMessage); message WM_MYMESSAGE;
...
 End;
...
procedure TForm2.MyMessageEvent(var msg: TMessage);//Обработчик нашего сообщения
begin
showmessage('Сообщение успешно получено!');
msg.Result:=0;//значение, полученное отправителем через результат функции SendMessage
end;

Теперь собственно реализация программы, использующая наш API:

...
const WM_MYMESSAGE=WM_USER+1;
...
procedure TForm1.Button1Click(Sender: TObject);
var wnd:HWND;
begin
wnd:=FindWindow(PChar('TForm2'),PChar('Form2'));//Ищем окно другого приложения
SendMessage(wnd, WM_MYMESSAGE,0,0);//Отправляем наше сообщение окну
end;
Теперь запустим две программы и щёлкнем по кнопке Button1, если всё сделано правильно, во второй программе отобразиться окно с надписью «Сообщение успешно получено!». НАШ API РАБОТАЕТ!

Здесь хочется отметить, что этот механизм позволяет так же передавать адреса памяти, в которой может храниться практически что угодно – от текстовой строки до собственных объектов. Делается это через API функции GlobalAlloc(), GlobalLock(), GlobalFree() для записи\считывания памяти используй функцию move.

Таким образом, на основе сообщений, можно построить собственный API, ни чем не уступающий реализации с использованием DLL.

Слабым местом в данной реализации, является использование HWND. Дело в том, что имя класса и заголовка окна может совпасть с другим приложением, поэтому необходимо однозначно идентифицировать ваше приложение в системе, что бы его случайно не «спутали» с другой программой. Одним из выходов может служить запрет на запуск второго экземпляра приложения, но это уже проблема иного плана…
DNK

DNK (статус: Студент), 10 февраля 2012, 19:57 [#5]:

API - Application Programming Interface. Это не обязательно набор функций, могут быть и классы, константы и тд. Более обще - это набор каких-либо программных артефактов, которые могут использоваться программистами во множестве других проектов, чтоб не заморачиваться на конкретной реализации. В общем я бы сказал, это более заумное слово для обозначения библиотек.
"Digital Networked Knight"
bugmenot

bugmenot (статус: 3-ий класс), 10 февраля 2012, 21:31 [#6]:

Цитата (Казаков Николай Константинович):

Если вопрос глупый прошу не пинать

Цитата (Казаков Николай Константинович):

Странный вопрос. Над проектом работаю в свободное от основной работы время. Есть желание разобраться.

Общительность - это, конечно, замечательно. Если до сих пор не прочитана соответствующая статья в педивикии, то да, вопрос глупый. Что конкретно осталось непонятым?
виконання програми розпочинається з того самого мiсця, де призупинилося.

eclipse

eclipse (статус: Посетитель), 12 февраля 2012, 16:08 [#7]:

Нет, это не глупый вопрос, но это сугубо личный вопрос!

12 февраля 2012, 16:09: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование с помощью API модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.03 сек.