OberonCore
https://forum.oberoncore.ru/

Win API в ББ. Как использовать функции из ДЛЛ Винды?
https://forum.oberoncore.ru/viewtopic.php?f=2&t=3162
Страница 1 из 1

Автор:  Виталий [ Суббота, 15 Январь, 2011 20:32 ]
Заголовок сообщения:  Win API в ББ. Как использовать функции из ДЛЛ Винды?

Всем доброго, возможно тема уже поднималась, но поверхностный поиск не дал ответа.
Мне нужно будет вызывать функции из ДЛЛок винды, допустим банально 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 ]
Заголовок сообщения:  Re: Win API в ББ. Как использовать функции из ДЛЛ Винды?

А зачем Вы что-то перетаскивали????

IMPORT WinApi;

...
WinApi.MessageBoxA(...)

Автор:  Виталий [ Суббота, 15 Январь, 2011 21:11 ]
Заголовок сообщения:  Re: Win API в ББ. Как использовать функции из ДЛЛ Винды?

Илья Ермаков писал(а):
А зачем Вы что-то перетаскивали????

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

Автор:  Илья Ермаков [ Суббота, 15 Январь, 2011 21:22 ]
Заголовок сообщения:  Re: Win API в ББ. Как использовать функции из ДЛЛ Винды?

Делаете заголовочный модуль:

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

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

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

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

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

Автор:  Виталий [ Суббота, 15 Январь, 2011 21:56 ]
Заголовок сообщения:  Re: Win API в ББ. Как использовать функции из ДЛЛ Винды?

О! Вот это уже другое тело, спасибо :)
Теперь все стало прозрачно понятным, и я смогу поюзать стороннюю библиотеку.
Пока вопросов нет.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/