|
Вопрос # 5 943/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Ни как не могу понять с какой стороны приступить к решению задачи. есть Приложение, написанное мной на Delphi. Я хочу для этого приложения написать API. С чего начать? Если вопрос глупый прошу не пинать, а разъяснить ситуацию, спасибо ))
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 12 февраля 2012, 16:08; участников в обсуждении: 6.
|
bugmenot (статус: 3-ий класс), 10 февраля 2012, 15:17 [#1]:
Цитата (Казаков Николай Константинович):
Я хочу для этого приложения написать API
Просто хочется или есть в этом необходимость?
Что, я хуже людей? Подите на Кузнецкий, все в лаковых у всех API.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 10 февраля 2012, 15:26 [#2]:
Странный вопрос. Над проектом работаю в свободное от основной работы время. Есть желание разобраться. Если есть ссылки проясняющие суть моего вопроса прошу поделиться
|
|
mirt.steelwater (статус: Посетитель), 10 февраля 2012, 18:05 [#3]:
API - это набор функций для работы с вашим приложением.
Сделайте библиотеку, в списке экспорта оформите основные функции, которые внешний пользователь должен выполнять в вашем приложении (ввести текст, открыть файл, отправить сообщение по сети и т.п.)
Ⓐ свобода сопротивление солидарность
|
|
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 (статус: Студент), 10 февраля 2012, 19:57 [#5]:
API - Application Programming Interface. Это не обязательно набор функций, могут быть и классы, константы и тд. Более обще - это набор каких-либо программных артефактов, которые могут использоваться программистами во множестве других проектов, чтоб не заморачиваться на конкретной реализации. В общем я бы сказал, это более заумное слово для обозначения библиотек.
"Digital Networked Knight"
|
|
bugmenot (статус: 3-ий класс), 10 февраля 2012, 21:31 [#6]:
Цитата (Казаков Николай Константинович):
Если вопрос глупый прошу не пинать Цитата (Казаков Николай Константинович):
Странный вопрос. Над проектом работаю в свободное от основной работы время. Есть желание разобраться.
Общительность - это, конечно, замечательно. Если до сих пор не прочитана соответствующая статья в педивикии, то да, вопрос глупый. Что конкретно осталось непонятым?
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
eclipse (статус: Посетитель), 12 февраля 2012, 16:08 [#7]:
Нет, это не глупый вопрос, но это сугубо личный вопрос!
|
12 февраля 2012, 16:09: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование с помощью API модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|