OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 10 Февраль, 2010 11:27 
Аватара пользователя

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 13:17
Сообщения: 84
Откуда: Россия, Мурманск
Код:
TYPE
   StringList = POINTER TO ARRAY OF POINTER TO ARRAY OF CHAR;

VAR
   List : StringList;

PROCEDURE ParseParameters(Line : ARRAY OF CHAR):StringList;
VAR
   res : StringList;
BEGIN
   NEW(res, 10);
   RETURN res
END ParseParameters;

BEGIN
   CmdLn := WinApi.GetCommandLineW();
   List := ParseParameters(CmdLn);
END UsiProcessMessage.

Код упрощён, схематичен, для акцента на проблеме.

На последней строчке ругается: "unknown array length". Непонятно в чём проблема. Я присваиваю не массивы, а указатели на массивы. В чём я здесь ошибаюсь?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 11:43 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Win/Docu/WinApi.odc
Цитата:
Pointers to Pointers

Pointers to pointers or basic types cannot be declared directly in Component Pascal. A type of the form
p: POINTER TO ARRAY [untagged] OF BaseType;
is used instead. You can use the form p[0] to dereference such a pointer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 11:44 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Проблема не в присвоении указателей, а в присвоении открытому массиву Line : ARRAY OF CHAR.

PROCEDURE GetCommandLineW* (): PtrWSTR;
PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR;

Длина массива, на кот. указывает CmdLn не известна. Пишите CmdLn$, чтобы присваивал String


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 12:17 
Аватара пользователя

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 13:17
Сообщения: 84
Откуда: Россия, Мурманск
Роман М. писал(а):
Win/Docu/WinApi.odc
Цитата:
Pointers to Pointers

Pointers to pointers or basic types cannot be declared directly in Component Pascal. A type of the form
p: POINTER TO ARRAY [untagged] OF BaseType;
is used instead. You can use the form p[0] to dereference such a pointer.

В документации, действительно есть такая фраза. А вот что она означает? Я спокойно использую pointers to pointers в модулях без каких-либо проблем.
По сабжу правильный совет дал Евгений Термингалиев, спасибо ему!
А вот по поводу этой цитаты из документации хочется разобраться, что же здесь имеется в виду?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 12:40 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
sacred писал(а):
В документации, действительно есть такая фраза. А вот что она означает? Я спокойно использую pointers to pointers в модулях без каких-либо проблем.
По сабжу правильный совет дал Евгений Термингалиев, спасибо ему!
А вот по поводу этой цитаты из документации хочется разобраться, что же здесь имеется в виду?

Например, такой тип нельзя объявить:
T = POINTER TO POINTER
А каким образом у тебя используется "pointers to pointers"?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 12:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Language Report писал(а):
6.4 Pointer Types

Variables of a pointer type P assume as values pointers to variables of some type T. T is called the pointer base type of P and must be a record or array type.
sacred писал(а):
В документации, действительно есть такая фраза. А вот что она означает?
Документация WinApi. Речь идёт про аналоги сишным указателям на любой тип, которые, в частности, используются для параметров-ссылок. В КП указатель на ARRAY [untagged] суть тоже самое.

P.S. "Термингалиев" -- спасибо за минуту смеха :lol: до этого максимум был три ошибки :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 13:11 
Аватара пользователя

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 13:17
Сообщения: 84
Откуда: Россия, Мурманск
Евгений Темиргалеев писал(а):
P.S. "Термингалиев" -- спасибо за минуту смеха :lol: до этого максимум был три ошибки :)

:) Да уж, простите, великодушно!

А по поводу указателей на указатели, я был немного сбит с толку первой цитатой из документации, так как решил, что она как-то связана с моим вопросом, и решил, что указатели на массив указателей - тоже вне закона.
Действительно, указатели на указатели я нигде не использую, да и, честно говоря, не представляю, для чего бы это могло понадобиться.


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

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


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

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


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

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