«Русский Форум» :: Просмотр темы - DLL

success
fail

Jul | AUG | Sep
| 13 |
2006 | 2007 | 2008

About this capture
COLLECTED BY
Organization: Alexa Crawls
Starting in 1996, Alexa Internet has been donating their crawl data to the Internet Archive. Flowing in every day, these data are added to the Wayback Machine after an embargo period.
Collection: 44_crawl
this data is currently not publicly accessible.
TIMESTAMPS

«Русский Форум»
Программирование по-русски.

FAQ Поиск Пользователи Группы Регистрация
Профиль Войти и проверить личные сообщения Вход

DLL

| Список форумов «Русский Форум» -> Глагол и Windows

Предыдущая тема :: Следующая тема
Автор | Сообщение
--- | ---

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Ср Май 24, 2006 7:26 Заголовок сообщения: DLL |

Вызов библиотек DLL и функций из них:

Код:

;************************************************************************
;ЗАДАЧА Библиотека-(имя-:РЯД ИЗ ЗНАК):ЦЕЛ;
ZADACHA OS_Bibliotjeka
%$imia priem
%$dlimia priem
push dword [ebp+%$imia]
call [__imp_LoadLibraryA]
KON
;************************************************************************
;ЗАДАЧА ОсвободитьБ-(библиотека:ЦЕЛ);
ZADACHA OS_OsvoboditeB
%$bibliotjeka priem
push dword [ebp+%$bibliotjeka]
call [__imp_FreeLibrary]
KON
;************************************************************************
;ЗАДАЧА АдресФункции-(библиотека:ЦЕЛ; имя-:РЯД ИЗ ЗНАК):ЦЕЛ;
ZADACHA OS_AdrjesFunkcii
%$bibliotjeka priem
%$dlimia priem
%$imia priem
push dword [ebp+%$bibliotjeka]
push dword [ebp+%$imia]
call [__imp_GetProcAddress]
KON

Последний раз редактировалось: Сый (Пн Июн 05, 2006 22:43), всего редактировалось 3 раз(а)

Вернуться к началу

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Ср Май 24, 2006 7:38 Заголовок сообщения: |

В ОС.asm имена используемых в нём фукций, естественно, нужно добавить следующие (для Alink):

Код:
extern __imp_LoadLibraryA extern __imp_FreeLibrary extern __imp_GetProcAddress

Описание для ОС.отд:

Код:

(******************************************************************************)
ЗАДАЧА Библиотека-(имя-:РЯД ИЗ ЗНАК):ЦЕЛ;
КОН Библиотека;
(******************************************************************************)
ЗАДАЧА ОсвободитьБ-(библиотека:ЦЕЛ);
КОН ОсвободитьБ;
(******************************************************************************)
ЗАДАЧА АдресФункции-(библиотека:ЦЕЛ; имя-:РЯД ИЗ ЗНАК):ЦЕЛ;
КОН АдресФункции;

Вернуться к началу

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Вс Май 28, 2006 18:59 Заголовок сообщения: |

Использование (вызов задачи Beep из библиотеки kernel32):

Код:

ОТДЕЛ Писк+;
ИСПОЛЬЗУЕТ ОБХОД, ОС ИЗ "...\Отделы\Обмен\", Вывод ИЗ "...\Отделы\Обмен\";
ВИД
Функция = ЗАДАЧА(Длительность, Частота: ЦЕЛ);
ПЕР
Библ, АФ: ЦЕЛ;
Сигнал: Функция;
УКАЗ
Библ := ОС.Библиотека("kernel32.dll");
АФ := ОС.АдресФункции(Библ, "Beep");
Сигнал:=ОБХОД.Значение(Функция, АФ);
Сигнал(500, 1000);
ОС.ОсвободитьБ(Библ)
КОН Писк.

Вернуться к началу

Издатель
Рядовoй
Зарегистрирован: 29.05.2006
Сообщения: 6

Добавлено: Пн Май 29, 2006 18:58 Заголовок сообщения: |

Как Вы думаете, целесообразно ли переработать весь файл ОС.asm в ОС.отд, перенеся ОС.Библиотека() и ОС.АдресФункции() в Асм.asm? Если да, то не смогли бы Вы этим заняться? Передавать цепочку знаков можно так:

Код:

ВИД
Задача2=ЗАДАЧА(п1,п2:ЦЕЛ);
ЗАДАЧА ПриёмЦепочки(адрес,размер:ЦЕЛ);
ПЕР
цепь:ЦЕПЬ[20]; (* можно ДОСТУП К ЦЕПЬ *)
поз:ЦЕЛ;
УКАЗ
(* СОЗДАТЬ(цепь,размер); *)
ОТ поз:=0 ДО размер-1 ВЫП
ОБХОД.ИзПамяти(адрес+поз,цепь[поз])
КОН;
Вывод.Цепь(цепь) (* цепь^ *)
КОН ПриёмЦепочки;
ЗАДАЧА ПередачаЦепочки;
ПЕР
ВнешняяЗадача:Задача2;
цепь:ЦЕПЬ[20];
УКАЗ
цепь:="Сыю привет!^";
ВнешняяЗадача:=ПриёмЦепочки;
ВнешняяЗадача(ОБХОД.Адрес(цепь),РАЗМЕР(цепь)) (* можно ДЛИНА(цепь) *)
КОН ПередачаЦепочки;

Вернуться к началу

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Чт Июн 01, 2006 9:26 Заголовок сообщения: |

Думаю, что отказываться от WIN32.lib, используя только вызов библиотек, нецелесообразно. Да и задачи Библиотека и АдресФункции относятся к ОС.asm, поскольку используют функции, вызываемые из Windows. Насколько я знаю, функция LoadLibrary обычно используется для вызова маленьких библиотек, используемых однажды в программе. Но если Вы считаете иначе, то можно и переделать.
А я предлагаю просто разместить эти задачи в ОС.asm для того, чтобы дать возможность вызывать функции, которых нет в ОС.asm. Также можно добавить и задачу Сигнал.

Вернуться к началу

Издатель
Рядовoй
Зарегистрирован: 29.05.2006
Сообщения: 6

Добавлено: Пт Июн 02, 2006 18:52 Заголовок сообщения: |

Вызов некоторых системных задач Windows из ОС.asm приходится сопровождать небольшими преобразованиями входных и выходных данных. Эти преобразования не очень удобно записывать на ассемблере. Также иногда требуется быстро завести новую системную задачу. Было бы проще для этих целей использовать сам Глагол. Вот тут бы и пригодились ваши новые задачи. Всё-таки я пока склоняюсь к новому ОС.отд. Если у вас сейчас нет времени, сообщите. Тогда попробую сделать его сам в ближайшее время.

Вернуться к началу

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Сб Июн 03, 2006 13:02 Заголовок сообщения: |

Вы предлагаете привести ОС.отд в такому виду:

Код:

ОТДЕЛ ОС;
ИСПОЛЬЗУЕТ
ОБХОД,Асм ИЗ "..\Иное\";
ПЕР
Библиотека,АдресФункции:ЦЕЛ;
ВИД
вВремя=ЗАДАЧА():ЦЕЛ;
вСпать=ЗАДАЧА(мс:ЦЕЛ);
ПЕР
Время-:вВремя;
Спать-:вСпать;
УКАЗ
Библиотека:=Асм.Библиотека("kernel32.dll");
Время:=ОБХОД.Значение(вВремя,Асм.АдресФункции(Библиотека,"GetTickCount"));
Спать:=ОБХОД.Значение(вСпать,Асм.АдресФункции(Библиотека,"Sleep"));
Асм.ОсвободитьБ(Библиотека)
КОН ОС.

?
Я просто не вижу в этом особой нужды, т. к. библиотеки Глагола уже написаны. Разве что, если только это увеличит скорость работы программ.
И что делать со сложными задачами, типа ОС.ФДляПополнения и ОС.Опрос?

Вернуться к началу

Издатель
Рядовoй
Зарегистрирован: 29.05.2006
Сообщения: 6

Добавлено: Вс Июн 04, 2006 19:14 Заголовок сообщения: |

По вашей просьбе в ОС.asm теперь появились:

Код:

ЗАДАЧА ИспользоватьБ(имя-:ЦЕПЬ):ЦЕЛ;
(* Выдаёт ссылку на dll библиотеку с именем <имя>. При неудаче возвращает 0. *)
ЗАДАЧА ОтказатьсяОтБ(библиотека:ЦЕЛ);
ЗАДАЧА АдресИзБ(библиотека:ЦЕЛ; имя-:ЦЕПЬ):ЦЕЛ;
ЗАДАЧА Гудок(частота,длительность:ЦЕЛ);
(* системный гудок, <частота> и <длительность> используются только в WinXP *)

Будьте осторожны, после вызова "ОтказатьсяОтБ" адреса задач данной библиотеки могут стать недействительными.
Последний раз редактировалось: Издатель (Чт Июн 22, 2006 8:13), всего редактировалось 1 раз

Вернуться к началу

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Вс Июн 04, 2006 20:26 Заголовок сообщения: |

Спасибо.

Вернуться к началу

Издатель
Рядовoй
Зарегистрирован: 29.05.2006
Сообщения: 6

Добавлено: Чт Июн 22, 2006 8:32 Заголовок сообщения: |

В новом выпуске за взаимодействие с внешними DLL отвечает "Заграница.отд". Будьте внимательны. "ссылкаНаВвод" и "ссылкаНаВывод" перенесены в "ОС.отд". Поэтому "Ввод.отд" и "Вывод.отд" претерпели изменения. В т.ч. изменилось количество приёмников у задач отдела "Вывод.отд"!

Вернуться к началу

Сый
Администратор
Зарегистрирован: 05.10.2005
Сообщения: 317

Добавлено: Чт Июн 22, 2006 9:36 Заголовок сообщения: |

Спасибо. Сам бы я так качественно переделать ОС.отд не смог бы.

Вернуться к началу

Показать сообщения:

| Список форумов «Русский Форум» -> Глагол и Windows | Часовой пояс: GMT + 3
Страница 1 из 1

Перейти:

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах