Список форумов «Русский Форум» «Русский Форум»
Программирование по-русски.
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

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 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Сый
Администратор


Зарегистрирован: 05.10.2005
Сообщения: 317

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

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

Описание для ОС.отд:
Код:
******************************************************************************
ЗАДАЧА Библиотека-имя-РЯД ИЗ ЗНАКЦЕЛ;
КОН Библиотека;

******************************************************************************
ЗАДАЧА ОсвободитьБ-библиотекаЦЕЛ;
КОН ОсвободитьБ;

******************************************************************************
ЗАДАЧА АдресФункции-библиотекаЦЕЛ; имя-РЯД ИЗ ЗНАКЦЕЛ;
КОН АдресФункции;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Сый
Администратор


Зарегистрирован: 05.10.2005
Сообщения: 317

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

Использование (вызов задачи Beep из библиотеки kernel32):
Код:
ОТДЕЛ Писк+;

ИСПОЛЬЗУЕТ ОБХОД, ОС ИЗ "...\Отделы\Обмен\", Вывод ИЗ "...\Отделы\Обмен\";

ВИД
  Функция = ЗАДАЧАДлительность, Частота ЦЕЛ;

ПЕР
  Библ, АФ ЦЕЛ;
  Сигнал Функция;

УКАЗ
  Библ = ОС.Библиотека"kernel32.dll";
  АФ = ОС.АдресФункцииБибл, "Beep";
  Сигнал=ОБХОД.ЗначениеФункция, АФ;
  Сигнал500, 1000;
  ОС.ОсвободитьББибл

КОН Писк.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Издатель
Рядовoй
Рядов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. Также можно добавить и задачу Сигнал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Издатель
Рядовoй
Рядовoй


Зарегистрирован: 29.05.2006
Сообщения: 6

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

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


Зарегистрирован: 05.10.2005
Сообщения: 317

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

Вы предлагаете привести ОС.отд в такому виду:
Код:
ОТДЕЛ ОС;

ИСПОЛЬЗУЕТ
  ОБХОД,Асм ИЗ "..\Иное\";

ПЕР
  Библиотека,АдресФункцииЦЕЛ;

ВИД
  вВремя=ЗАДАЧАЦЕЛ;
  вСпать=ЗАДАЧАмсЦЕЛ;

ПЕР
  Время-вВремя;
  Спать-вСпать;

УКАЗ
  Библиотека=Асм.Библиотека"kernel32.dll";
  Время=ОБХОД.ЗначениевВремя,Асм.АдресФункцииБиблиотека,"GetTickCount";
  Спать=ОБХОД.ЗначениевСпать,Асм.АдресФункцииБиблиотека,"Sleep";
  Асм.ОсвободитьББиблиотека

КОН ОС.

?
Я просто не вижу в этом особой нужды, т. к. библиотеки Глагола уже написаны. Разве что, если только это увеличит скорость работы программ.
И что делать со сложными задачами, типа ОС.ФДляПополнения и ОС.Опрос?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Издатель
Рядовoй
Рядов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    Заголовок сообщения: Ответить с цитатой

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Издатель
Рядовoй
Рядовoй


Зарегистрирован: 29.05.2006
Сообщения: 6

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

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


Зарегистрирован: 05.10.2005
Сообщения: 317

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

Спасибо. Сам бы я так качественно переделать ОС.отд не смог бы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов «Русский Форум» -> Глагол и Windows Часовой пояс: GMT + 3
Страница 1 из 1

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


Rambler's Top100