Ошибки, замеченные в работе компилятора
http://vozmifail.rusfolder.net/files/43097312 Ссылка на файл, модуль. Ошибка в 1 строке всегда при каждой компиляции. MyFiles.pas(1) : Встречено ‘C’, а ожидался раздел описаний или begin
У меня компилируется. А какая у вас ОС и версия .NET Framework?
@ibond, учитывая, что вопрос @Ara_Ellaryan был перенесён (и вначале был отреплаен для меня), имеет смысл делать меншн
//Здесь вы можете добавить свой комментарий
02.03.2015 19:14:09 PascalABCCompiler.Core v2.2.0.842 (08.02.2015), debug version Runtime version: 4.0.30319.34014 OS version: Microsoft Windows NT 6.2.9200.0 Processor count: 4 WorkingSet: 66492 kb StatesList: CompilationFinished Program1.pas Ready
Error[0]: Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.IO.IOException: Устройство не готово.
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в System.IO.Directory.SetCurrentDirectory(String path) в PascalABCCompiler.Compiler.Compile()’
Это что за ошибка? И почему, кстати, не сохранили пользовательские данные с прошлого форума?
Обновил версию паскаля и проблема исчезла, хотя после нескольких компиляций появилась один раз та же ошибка, но с литерой ‘D’.
Это что за ошибка?
Program1.pas лежит, например, на недоступном сетевом диске, вообщем на не готовом устройстве
И почему, кстати, не сохранили пользовательские данные с прошлого форума?
Этот вопрос лучше задать в специализированном подфоруме. Я этим не занимаюсь
Здравствуйте! Я решил поработать с регистром, набрал следующий код (Сам паскаль отображал подпункты):
begin
Microsoft.Win32.Registry.SetValue('HKEY_CLASSES_ROOT\pas_auto_file\shell\open\command','','hh',string);
end.
А при запуске выдается ошибка “Disk.pas(12) : Неизвестное имя ‘Microsoft’”. Откуда взялась эта ошибка?
Да, пространство Microsoft как-то обделили. подключите uses Microsoft.Win32; и Registry.SetValue должно работать. Баг исправим в следующем билде.
Пишем присваивания:
переменная := выражение;
потом выделяем переменная (или просто поставим курсор после переменная перед пробелом) и нажимаем правый кнопку миши. Программа проверяет путь который написан в файле “C:\Program Files\PascalABC.NET\samples.pct”:
28 [if]
29 !Tutorial\05_IfCaseBoolean\ //если меняем это путь то проверяет новый путь.
Если это путь существует то нормально открывается контекстный меню, а если не существует то передаёт ошибка: Не удалось найти часть пути "C:\PABCWork.NET\Samples!Tutorial\05_IfCaseBoolean"
PascalABCCompiler.Core v2.2.0.849 (03.03.2015)
PascalABCCompiler.Core v2.2.0.849 (03.03.2015)
uses System, System.Runtime.InteropServices, Microsoft.Win32.SafeHandles;
type ushort = word;
// const sss = 1; если раскомментировать эту строку - ошибки компиляции не будет
[DllImport('kernel32.dll', SetLastError = true)]
function GetStdHandle(nStdHandle:System.Int32): System.IntPtr; external;
begin
var U:ushort:= 0;
var cHandleI:IntPtr := GetStdHandle(-10);
end.
не компилируется с ошибкой “: Встречено ‘function’, а ожидался идентификатор”
ЗЫ… если переместить “type ushort = word;” ниже импортируемой функции то все компилируетсяся нормально
Да. сделали - теперь Auto можно писать без закорючек
Да, сделали.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
KEY_EVENT_RECORD = packed record
bKeyDown: boolean;
wRepeatCount: word;
wVirtualKeyCode: word;
wVirtualScanCode: word;
UnicodeChar: char;
dwControlKeyState: longword;
end;
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
KEY_EVENT_RECORD = packed record
[FieldOffset(0)] bKeyDown: boolean;
[FieldOffset(4)] wRepeatCount: word;
[FieldOffset(6)] wVirtualKeyCode: word;
[FieldOffset(8)] wVirtualScanCode: word;
[FieldOffset(10)] UnicodeChar: char;
[FieldOffset(12)] dwControlKeyState: longword;
end;
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
INPUT_RECORD = packed record
[FieldOffset(0)] EventType: ushort;
// Очередность следующих полей влияет на FieldOffset в KEY_EVENT_RECORD ...
[FieldOffset(4)] KeyEvent: KEY_EVENT_RECORD;
[FieldOffset(4)] MouseEvent: MOUSE_EVENT_RECORD;
[FieldOffset(4)] WindowBufferSizeEvent: WINDOW_BUFFER_SIZE_RECORD;
[FieldOffset(4)] MenuEvent: MENU_EVENT_RECORD;
[FieldOffset(4)] FocusEvent: FOCUS_EVENT_RECORD;
end;
// Очередность записей при LayoutKind.Explicit влияет на FieldOffset в подчиненных записях … если они описаны как LayoutKind.Sequential это Баг или Фича?
LayoutKind.Sequential означает, что данные в структуре должны идти последовательно друг за другом.
LayoutKind.Explicit позволяет задавать смещения в самом коде, в частности реализовать так называемые “записи с вариантами”
https://msdn.microsoft.com/ru-ru/library/system.runtime.interopservices.layoutkind(v=vs.110).aspx
теоретически данные структуры должны быть одинаковыми … но при компиляции ведут себя по разному возможно в данном случае что-то не так с обработкой LayoutKind.Explicit, LayoutKind.Sequential или вложенных структур …
{$apptype console}
uses System, System.Runtime.InteropServices, Microsoft.Win32.SafeHandles;
type
[StructLayout(LayoutKind.Sequential)]
aType = packed record
bValue1: boolean;
iValue2: integer;
end;
[StructLayout(LayoutKind.Sequential)]
bType = packed record
iValue1: integer;
bValue2: boolean;
end;
[StructLayout(LayoutKind.Sequential,CharSet = CharSet.Unicode)]
cType = packed record
bValue1: boolean;
cValue2: char;
wValue3: word;
end;
[StructLayout(LayoutKind.Sequential)]
dType = packed record
iValue1: integer;
iValue2: integer;
end;
[StructLayout(LayoutKind.Explicit)]
BrokenType = packed record
[FieldOffset(0)] B:bType;
[FieldOffset(0)] A:aType;
[FieldOffset(0)] D:dType;
[FieldOffset(0)] C:cType;
// изменение последовательности полей данной структуры сильно влияет на результат !!!!
end;
procedure CheckTrueResult(aTrue:boolean;aStr:string);
begin
if aTrue then WriteLn(aStr,' : result = true - PASS') else WriteLn(aStr,' : result = false - ERROR !!!!!!');
end;
begin
var rawvalues: array of longword := (2,13);
WriteLn('... Check aType ...');
var a: aType := aType(Marshal.PtrToStructure(GCHandle.Alloc(rawvalues, GCHandleType.Pinned).AddrOfPinnedObject(), typeof(aType)));
CheckTrueResult(a.bValue1 = true,'a1 = true');
CheckTrueResult(a.iValue2 = 13,'a2 = 13');
WriteLn('... Check bType ...');
var b: bType := bType(Marshal.PtrToStructure(GCHandle.Alloc(rawvalues, GCHandleType.Pinned).AddrOfPinnedObject(), typeof(bType)));
CheckTrueResult(b.iValue1 = 2,'b1 = 2');
CheckTrueResult(b.bValue2 = true,'b2 = true');
var broken: BrokenType := BrokenType(Marshal.PtrToStructure(GCHandle.Alloc(rawvalues, GCHandleType.Pinned).AddrOfPinnedObject(), typeof(BrokenType)));
WriteLn('');
WriteLn('... Check BrokenType ... Explicit');
WriteLn(Format('SizeOf(aType)={0}, Marshal.SizeOf(typeof(aType))={1}',SizeOf(aType),Marshal.SizeOf(typeof(aType))));
WriteLn(Format('SizeOf(bType)={0}, Marshal.SizeOf(typeof(bType))={1}',SizeOf(bType),Marshal.SizeOf(typeof(bType))));
WriteLn(Format('SizeOf(cType)={0}, Marshal.SizeOf(typeof(cType))={1}',SizeOf(cType),Marshal.SizeOf(typeof(cType))));
WriteLn(Format('SizeOf(broken)={0}, Marshal.SizeOf(typeof(broken))={1}',SizeOf(BrokenType),Marshal.SizeOf(typeof(BrokenType))));
WriteLn('');
WriteLn(Format('rawvalues[0]={0}, rawvalues[1]={1}',rawvalues[0], rawvalues[1]));
WriteLn(Format('broken.a1={0}, broken.a2={1}',broken.a.bValue1,broken.a.iValue2));
WriteLn(Format('broken.b1={0}, broken.b2={1}',broken.b.iValue1,broken.b.bValue2));
WriteLn(Format('broken.c1={0}, broken.c2=#{1}, broken.c3={2}',broken.c.bValue1,word(broken.c.cValue2), broken.c.wValue3));
WriteLn(Format('broken.d1={0}, broken.d2={1}',broken.d.iValue1,broken.d.iValue2));
WriteLn('');
CheckTrueResult(broken.a.bValue1 = true,'BrokenType.a1 = true');
CheckTrueResult(broken.a.iValue2 = 13,'BrokenType.a2 = 13');
CheckTrueResult(broken.b.iValue1 = 2,'BrokenType.b1 = 2');
CheckTrueResult(broken.b.bValue2 = true,'BrokenType.b2 = true');
CheckTrueResult(broken.c.bValue1 = true,'BrokenType.b1 = true');
CheckTrueResult(broken.c.cValue2 = #13,'BrokenType.a2 = #13');
WriteLn('');
WriteLn('... Check BrokenType ... additional');
CheckTrueResult(broken.a.iValue2 <> 1,'BrokenType.a2 <> 1 (a2 Must be 13)');
CheckTrueResult(broken.a.iValue2 <> 2,'BrokenType.a2 <> 2 (a2 Must be 13)');
CheckTrueResult(broken.a.iValue2 <> 13,'BrokenType.a2 <> 13 (a2 Must be 13)');
CheckTrueResult(broken.a.bValue1 = true,'BrokenType.a1 = true');
CheckTrueResult(broken.b.iValue1 <> 1,'BrokenType.b1 <> 1 (b1 Must be 2)');
CheckTrueResult(broken.b.iValue1 <> 2,'BrokenType.b1 <> 2 (b1 Must be 2)');
CheckTrueResult(broken.b.iValue1 <> 13,'BrokenType.b1 <> 13 (b1 Must be 2)');
CheckTrueResult(broken.b.bValue2 = true,'BrokenType.b1 = true');
end.
у меня результат такой: … Check aType … a1 = true : result = true - PASS a2 = 13 : result = true - PASS … Check bType … b1 = 2 : result = true - PASS b2 = true : result = true - PASS
… Check BrokenType … Explicit SizeOf(aType)=8, Marshal.SizeOf(typeof(aType))=8 SizeOf(bType)=8, Marshal.SizeOf(typeof(bType))=8 SizeOf(cType)=8, Marshal.SizeOf(typeof(cType))=8 SizeOf(broken)=8, Marshal.SizeOf(typeof(broken))=8
rawvalues[0]=2, rawvalues[1]=13 broken.a1=True, broken.a2=0 broken.b1=851969, broken.b2=False broken.c1=True, broken.c2=#13, broken.c3=0 broken.d1=851969, broken.d2=0
BrokenType.a1 = true : result = true - PASS BrokenType.a2 = 13 : result = false - ERROR !!! BrokenType.b1 = 2 : result = false - ERROR !!! BrokenType.b2 = true : result = false - ERROR !!! BrokenType.b1 = true : result = true - PASS BrokenType.a2 = #13 : result = true - PASS
… Check BrokenType … additional BrokenType.a2 <> 1 (a2 Must be 13) : result = true - PASS BrokenType.a2 <> 2 (a2 Must be 13) : result = true - PASS BrokenType.a2 <> 13 (a2 Must be 13) : result = true - PASS BrokenType.a1 = true : result = true - PASS BrokenType.b1 <> 1 (b1 Must be 2) : result = true - PASS BrokenType.b1 <> 2 (b1 Must be 2) : result = true - PASS BrokenType.b1 <> 13 (b1 Must be 2) : result = true - PASS BrokenType.b1 = true : result = false - ERROR !!!
PS: если написать [FieldOffset(-1)] будет ошибка компилятора
Вообще в WriteConsoleInput надо использовать [MarshalAs(UnmanagedType.LPArray)] и для функции задать CharSet = CharSet.Unicode и EntryPoint = “WriteConsoleInputW”
данные замечания никак не влияют на результат выполнения программы можешь сам попробовать … щас в личку кину ЗЫ пришлось для стабильности все структуры перевести на LayoutKind.Explicit и FieldOffset задать …
uses
System.Collections.Generic;
type
XParameter = class
private
mColumnName: string;
end;
TestCollection = List<XParameter>;
procedure TestCollection.Add(iparam: XParameter);
begin
//добавляем в общую коллекцию
self.List.Add(iparam);
end;
begin
end.
а тут просто ошибка компилятора вылетает