OberonCore https://forum.oberoncore.ru/ |
|
Проблемы с передачей параметров https://forum.oberoncore.ru/viewtopic.php?f=2&t=178 |
Страница 1 из 1 |
Автор: | Grabli [ Понедельник, 24 Апрель, 2006 21:09 ] |
Заголовок сообщения: | Проблемы с передачей параметров |
Конечно строгая типизация в компонентном паскале дело хорошее. Но это головная боль для тех кто пользует WinApi функции. Как передать параметр типа WinApi.PtrSTR в функцию WinApi.MessageBoxA? Например: Код: MODULE Test;
IMPORT WinApi, SYSTEM; VAR Msg: ARRAY 255 OF CHAR; Res: INTEGER; BEGIN Msg:="Иди работай"; Res:=WinApi.MessgaeBoxA(HWnd, Msg, "Сообщение" , {4,5}); END Test. На такое компилятор ругнется. Типы не соответствуют. Если вместо Msg передать указатель, SYSTEM.ADR(Msg): Res:=WinApi.MessgaeBoxA(HWnd, SYSTEM.ADR(Msg), "Сообщение" , {4,5}); То тоже ругается. Если Msg перевести к типу WinApi.PtrSTR с помощью SYSTEM.VAL(WinApi.PtrSTR, Msg): Res:=WinApi.MessgaeBoxA(HWnd, SYSTEM.VAL(WinApi.PtrSTR, Msg), "Сообщение" , {4,5}); То проглотит. Но при запуске выведет ошибку... Как поуму передавать в функции WinApi параметры? |
Автор: | Илья Ермаков [ Понедельник, 24 Апрель, 2006 21:13 ] |
Заголовок сообщения: | |
Не забывайте, что в КП CHAR двубайтовый, юникодовский. Поменяйте в вышеприведенном примере ARRAY OF CHAR на ARRAY OF SHORTCHAR - и все заработает. |
Автор: | Grabli [ Вторник, 25 Апрель, 2006 07:56 ] |
Заголовок сообщения: | |
Однако, с таким типом Msg: ARRAY 255 OF SHORTCHAR; Log.String(Msg) отказывается работать. ---------------------------------- И ещё. Что лучше сделать, что бы во всей программе использовались одинаковые типы? Создать один модуль, например, Types, где собрать все пользовательские типы. И в каждом модуле импортировать только их, что бы была совместимость. Или TYPE MyType = ARRAY 20 OF INTEGER; в модуле1 Будет ли он соответствовать: TYPE MyType = ARRAY 20 OF INTEGER; в модуле2 |
Автор: | Илья Ермаков [ Вторник, 25 Апрель, 2006 09:38 ] |
Заголовок сообщения: | |
Да нет, отдельный модуль выделять незачем. Каждый модуль объявляет те типы, которые его касаются. Цитата: Однако, с таким типом Msg: ARRAY 255 OF SHORTCHAR;
Log.String(Msg) отказывается работать. Log.String(LONG(Msg)). А вообще-то не используйте SHORTCHAR нигде, кроме модулей, которые работают с системой. Приводите обычный CHAR: SHORT(CHAR), или, если в строке используются русские символы, MtStrings.Short. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |