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; Еще не могу найти в документации эквивалент обероновского флага UNTRACED для ВВ.
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. |
Автор: | Илья Ермаков [ Среда, 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/ |