OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 20 Октябрь, 2017 06:25

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 15 Январь, 2011 20:32 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Всем доброго, возможно тема уже поднималась, но поверхностный поиск не дал ответа.
Мне нужно будет вызывать функции из ДЛЛок винды, допустим банально MessageBox.
Я знаю что он есть в модуле WinApi, но мне потренироваться нужно, я планирую вызывать из других ДЛЛ функции, и возможно даже нестандартных.

Пошарив по сорцам модуля я вышел на спецификации функций, и попробовал перетащить их в свой модуль.
Код:
MODULE m;
IMPORT WinApi;

TYPE   
   PROCEDURE mb ["USER32.dll", "MessageBoxA"] (hWnd: HWND; lpText: PtrSTR; lpCaption: PtrSTR; uType: SET): INTEGER;
   
PROCEDURE do*;
VAR s:ARRAY(30) OF CHAR;lpText, lpCaption: WinApi.PtrSTR;
i:INTEGER;
BEGIN
 i:= mb(WinApi.GetForegroundWindow(),lpText, lpCaption,{0});
END do;

END m.

Однако получил кучу ошибок.
Первая скажем на ["USER32.dll", "MessageBoxA"] - illegal sys flag

Скажите пожалуйста как правильно описывать импорт из библиотек в ББ


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Январь, 2011 20:35 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8821
Откуда: Россия, Орёл
А зачем Вы что-то перетаскивали????

IMPORT WinApi;

...
WinApi.MessageBoxA(...)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Январь, 2011 21:11 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Илья Ермаков писал(а):
А зачем Вы что-то перетаскивали????

Для того чтоб научится работать с внешними библами ОСи.
Ладно. Пример не удачный. Допустим у меня есть ДЛЛ, где экспортируется функция "Myfunc(char* s)"
Как мне ее использовать в ББ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Январь, 2011 21:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8821
Откуда: Россия, Орёл
Делаете заголовочный модуль:

MODULE MyDll ['mydll.dll'];
IMPORT SYSTEM;

здесь объявляете заголовки к процедурам DLL. Как это сделано в исходнике, например, WinApi.

Дальше будете импортировать заголовочный модуль MyDll и обращаться к процедурам.

Вообще, это описано в документации ББ в разделе "Платформенно-зависимые особенности".

Если интересуют технические подробности, то:
1) Для таких заголовочных модулей компилятор создаёт только символьный файл, а не кодовый (фактически, модуля как исполняемого компонента не образуется).
2) В модуле, который импортирует заголовок MyDll, компилятор ставит точки связи к функциям mydll.dll.
3) Когда модуль будет загружаться, ядро ББ загрузит и DLL и свяжет точки из модуля с функциями DLL.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Январь, 2011 21:56 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
О! Вот это уже другое тело, спасибо :)
Теперь все стало прозрачно понятным, и я смогу поюзать стороннюю библиотеку.
Пока вопросов нет.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB