Так другие компиляторы и не подозревают о существовании PacalАВС.NЕТ. Так что единый код Вы все равно не сможете написать. И далее, что значит “адаптировать”? У Вас там конструкции, не работающие в PascalАВС.NЕТ ?
То есть ничего подобного нет ? http://docwiki.embarcadero.com/RADStudio/Rio/en/Conditional_compilation_(Delphi)
Да, типы и другая фишка.
Нет, конечно. Вы берете многоплатформенные проекты и почему-то удивляетесь, что их директив нет в проекте, рассчитанном на одну платформу? Могу Вас “обрадовать”: подобных директив я не встречал и в других .NET языках.
По крайней мере компилятору надо сообщить о самом себе - {$DEFINE PASCALABC}. Я не прав?
Кому сообщить, что именно и зачем? Если версию надо сообщить - то она лежит в PascalABCVersion - просто выводите. Зачем в коде программы PascalАВС.NЕТ сообщать, что он код PascalАВС.NЕТ ? Право же, Вы чего-то странного хотите.
Как ты пишешь код который должен работать на Free Pascal / Delphi / PascalABC ? Есть пример ? Допустим есть код на FPC / Delphi с типом UInt16, как ты его напишешь, чтобы он работал и на PascalABC?
uses System;
begin
var a: UInt16 := 65000;
Write(a);
end.
И не нужно “тыкать”. Мы с Вами на брудершафт не пили…
Да, это правильная идея. Но у нас этого нет. Точнее, мы начинали делать это: в PABCSystem.pas есть
{$define PascalABC}
Но она распространяется только на уровень одного модуля.
Попробуем сделать на глобальном уровне
Отлично. А такой тип есть в PascalABC? Где почитать ? Ну а вот это - function ZZX(n: UInt64; start: UInt64): Pointer; cdecl; external ‘libyyy’ name LIB_FNPFX + ‘ZZX’;
Хорошо.
Такой - это какой? Я же Вам написал рабочий код. Что касается Pointer - забудьте про них в NET-языках. Тут ссылочная объектная модель, они не нужны. Почитать про типы кратко можете в Справке. Расширено - в литературе на официальном сайте и в справке по Microsoft.NЕТ
Да, не пили. Извиняюсь.
Сообщение Admin: У нас на форуме принято общаться на Вы.
Надо сказать, что наша реализация {$define} полностью соответствует дельфийской. Там тоже определение распространяется на модуль, а не на всю программу. Вот пример из Delphi:
program Project4;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Unit3 in 'Unit3.pas';
var a: integer;
begin
{$ifdef My}
Write(1);
{$endif}
readln;
end.
А в Unit:
unit Unit3;
{$define My}
interface
implementation
end.
Так вот - программа не видит определение My из Unit.
То есть, обеспечивая совместимость, непонятно, как это сделать. В Delphi есть проекты, и в опциях проекта это можно указать. А без проекта - непонятно, как.
P.S. Кстати, в Delphi не определён символ Delphi
При наличии раздельной компиляции и с учетом того, что это директива (если верить Справке) предназначена для условной компиляции, с чего бы внешняя программа видела это определение? Другое дело, если говорить о том, чтобы сделать его глобальным. Но вот на самом деле, надо ли это настолько, чтобы заморачиваться? PascalАВС.NЕТ все дальше уходит от балласта, навязанного совместимостью с предшественниками.
@JulStrat, сделали. Скачайте новую версию.
Теперь в любом модуле и в основной программе определен символ PASCALABC. И этот код
begin
{$ifdef PASCALABC}
Print(1);
{$endif}
{$ifdef FPC}
Print(2);
{$endif}
end.
выводит 1
Да, извините, не посмотрел. Но там половина сообщения по другой теме.
В любом случае, проблема решена, и я хотел чтобы @JulStrat обратил на это внимание
Спасибо, работает (v3.6.3.2607).