Мда… Когда я начал составлять пример в программе понял на сколько абсурдна идея, но я имел в виду что то типо этого:
type
t1 = class
end;
class procedure t1.p1; extensionmethod;
begin
end;
begin
end.
Абсурдность в том что не может быть никакого self… Но вообще внешне описывать статичные вне тела типа было бы удобно, к примеру дописать System.Math своими методами, экземплярные же можно сделать так…
. Как именно работают пространства имён тоже не совсем понятно.
-------------------------U1.pas-----------------------------
Namespace U1;
Type Reader=Class
End;
End.
-------------------------U2.pas-----------------------------
Namespace U2;
Type Writer=Class
End;
End.
-------------------------MyLib.pas-----------------------------
Library MyLib;
{$IncludeNamespace ‘U1.pas’}
{$IncludeNamespace ‘U2.pas’}
End.
При компиляции вроде-бы всё хорошо, но вот при попытке подключения к программе MyLib.dll возникает проблема: в ней нет ничего. Ни пространств имён U1, U2; ни их содержимого. Может, я что-то не правильно делал?
{$define DEBUG}
begin
{$ifndef DEBUG}
writeln('Имя DEBUG не определено');
{$else}
writeln('Имя DEBUG определено');
{$endif}
end.
Она форматируется, не ставя отступы перед writeln-ами, хотя в справке они есть, ошибка в справке или форматировании? ИМХО отступы будут приятной фичей…
P.S. DEBUG осталось определено после удаления первой строчки и выключения настройки
Генерировать отладочную информацию (Debag-версия)
Откуда оно берётся?
Здравствуйте! Возникла такая проблема: при компиляции программы возникает ошибка в строке
Var Input: array of array of array of System.int32:=***.ToArray(new Bitmap('input.jpg'));
При этом тип возвращаемого значения функции ToArray соответствует указанному. После замены на
Var Input: array of array of array of System.int32:=***.ToArray(new System.Drawing.Bitmap('input.jpg')); ругается на отсутствие ; после System, однако если вызвать конструктор по имени, без new, то всё работает нормально.
Очень хотелось бы узнать, системные классы в паскале когда то получат нормальное описание? Вот сейчас мне надо было System.NullReferenceException, я решил посмотреть через паскаль и увидел только 4 конструктора от всего типа. С анализатором кода не лучше, он видит только первую строчку описания у третьего конструктора и вообще не видит четвёртый конструктор. Это только 1 пример, таких полупустых классов-метаданных полно.
Сама форма вопроса свидетельствует о том, что Вы его многократно задавали и получали отказ.
По сути вопроса ничего не понятно. В справочной системе описания не будет - это классы .NET.
В классе 4 конструктора, куча методов и свойств - анализатор кода их видит.
Ммм нет я ни разу не спрашивал, но меня это давно тревожит и я надеялся что со временем описания допишут. А в чём смысл изначально этих полупустых страниц, если документацию правильно смотреть всё же на msdn. Хотя бы поставьте в начале каждой такой страницы метаданных где полная версия(ссылку или т.п.).
Я не понимаю, о каких полупустых страницах Вы говорите. Я вижу короткую справку по конструктору у Вас на скриншоте. Эта информация берется нами из стандартниго xml-файла, который поставляется вместе с .NET для русских подсказок. Этот же файл используется для подсказок в Visual Studio. Полную документацию надо смотреть на MSDN. Мы в своё время пытались сделать, чтобы по нажатию на F1 загружался браузер с подсказкой из MSDN. И это во многих случаях работает. Например, нажмите F1 на слове NullReferenceException и посмотрите, что получится.
type
Ir1=interface end;
r1=record(Ir1) end;
begin
var a := new Ir1[1];
a[0] := new r1;
writeln(a);
end.
Выведет [nil] хотя разумеется там что то записано. Я уже добивался такого эффекта поинтерами и знаю, что ни к чему хорошему работа с такими переменными не приводит. Это ошибка паскаля или так и C++ работает?
Только что добавил issue на гитхабе и очень мучает вопрос: откуда взялось число 16777215. Это было бы максимальным значением uint24 ЕСЛИ БЫ такой тип существовал… Так какую магию вы использовали?)))
там нет ошибки. для метода с вложенными процедурами генерируется специальный метод $p1$4.p1 с параметром, в котором передается запись активации. этот метод вызывается из p1. и чтобы при отладке по F7 пропускался этот вызов, в сорсконтекст test.t1.p1 и помещается магическая константа 16777215. Эта константа используется отладчиком .NET. так что закрывайте issue.