OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 24 Апрель, 2024 02:47

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Проблемы с передачей параметров
СообщениеДобавлено: Понедельник, 24 Апрель, 2006 21:09 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
Конечно строгая типизация в компонентном паскале дело хорошее. Но это головная боль для тех кто пользует 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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Не забывайте, что в КП CHAR двубайтовый, юникодовский. Поменяйте в вышеприведенном примере ARRAY OF CHAR на ARRAY OF SHORTCHAR - и все заработает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 25 Апрель, 2006 07:56 

Зарегистрирован: Суббота, 22 Апрель, 2006 21:30
Сообщения: 35
Однако, с таким типом 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 
Модератор
Аватара пользователя

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

Цитата:
Однако, с таким типом Msg: ARRAY 255 OF SHORTCHAR;
Log.String(Msg) отказывается работать.

Log.String(LONG(Msg)).
А вообще-то не используйте SHORTCHAR нигде, кроме модулей, которые работают с системой. Приводите обычный CHAR: SHORT(CHAR), или, если в строке используются русские символы, MtStrings.Short.


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

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


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

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


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

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