OberonCore
https://forum.oberoncore.ru/

ошибка
https://forum.oberoncore.ru/viewtopic.php?f=1&t=2216
Страница 1 из 1

Автор:  id_ler [ Среда, 30 Декабрь, 2009 12:20 ]
Заголовок сообщения:  ошибка

При компиляции модуля получаю следующую ошибку
Код:

a: LONGINT;[untagged open array not allowed as value parameter]
Если эту строку закомментировать, то ошибка переместится в самый конец модуля – к присвоению значения этой переменной. Т.е. все остальное ошибок не содержит, вроде бы. Как ее правильно исправить?

Автор:  id_ler [ Среда, 30 Декабрь, 2009 15:07 ]
Заголовок сообщения:  Re: ошибка

В секции VAR до указанного выше места описываются переменные процедурного типа с экспортом только на чтение. Если их все закомментировать, тогда эта ошибка пропадает. У меня ВВ v 1.5, а документация на ВВ v 1.4, где говорится о возможных ограничениях в будущем на использование таких типов. Например, маркер ошибки с сообщением об использовании устаревшей COPY появляется, а как быть с процедурными типами непонятно.

Автор:  Info21 [ Среда, 30 Декабрь, 2009 15:47 ]
Заголовок сообщения:  Re: ошибка

Непонятно. Приведите минимальный модуль с этой ошибкой.

Автор:  id_ler [ Среда, 30 Декабрь, 2009 18:52 ]
Заголовок сообщения:  Re: ошибка

Когда начал упрощать, то нашел причину. В примере закомментировал неправильное указание типа для lpModuleName
Код:
 MODULE Test;
   IMPORT SYSTEM, WinApi;
   VAR
   (*  d-: PROCEDURE (lpModuleName: ARRAY [untagged] OF CHAR): INTEGER;   *)
      a-: PROCEDURE (hModule: LONGINT; lpProcName: ARRAY OF CHAR): INTEGER;
      WriteFile-: PROCEDURE (hFile: WinApi.HANDLE; lpBuffer: WinApi.PtrVoid; nNumberOfBytesToWrite: INTEGER; VAR [nil] lpNumberOfBytesWritten: INTEGER; VAR [nil] lpOverlapped: WinApi.OVERLAPPED): INTEGER;
      b: LONGINT;       
      PROCEDURE GetProcAddress*(hModule: INTEGER; procName: ARRAY OF CHAR; VAR c: LONGINT);
   BEGIN
      c := a(hModule, procName)
   END GetProcAddress;

BEGIN
   IF b = 0 THEN
      INC(b);
   END;
END Test.
Еще не могу найти в документации эквивалент обероновского флага UNTRACED для ВВ.

Автор:  Илья Ермаков [ Среда, 30 Декабрь, 2009 21:37 ]
Заголовок сообщения:  Re: ошибка

Поставьте IN lpModuleName, это будет соответствовать char*.

А так Вы просите передавать массив по копированию, но как компилятор сгенерирует код для копирования безтегового массива (откуда он узнает его размер)?

Автор:  id_ler [ Четверг, 31 Декабрь, 2009 06:21 ]
Заголовок сообщения:  Re: ошибка

Илья Ермаков писал(а):
Поставьте IN lpModuleName, это будет соответствовать char*.

А так Вы просите передавать массив по копированию, но как компилятор сгенерирует код для копирования безтегового массива (откуда он узнает его размер)?
Пока я убрал все флаги и модуль нормально скомпилировался. Получилась основа для подсистемы Оберон. Теперь займусь модулем Win32.Kernel.Mod. Тему «Куда и как развивать Оберон-системы?» я читал. Поэтому не хотел создавать похожую, только теперь уже с примерами для начинающих(т.е. меня). По ходу дела вопросов унификации возникнет много, а нужна ли такая тема я не знаю.

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