Что такое код delphi net


Содержание

Что такое код delphi net

http://delphi.about.com/library/weekly/aa112902a.htm
Microsoft наступило на горло VB и теперь драма программистов VB, их продали C#, похоже, доходит и до дельфистов.
По- моему, дальнейшие развитие Delphi невозможно без серьезных нарушений приемственности.
Delphi Plus (c)
Что вы думаете об этом?

2asdf (06.12.02 17:55)
По- моему, дальнейшие развитие Delphi невозможно без серьезных нарушений приемственности.
Обоснуйте.

Это не моё мнение, это с Delphi Plus (c)
Мне интересно что народ думает?

Не ссыте девки все уедем.

Это, похоже, даже не DelphiPlus мнение, а чье-то там еще. Причем из чего образовалось такое мнение — не понятно.

Никто никому на горло не наступал. Бэйсик и Си — дети Microsoft. И .NET был создан для утилизации старых COM технологий, потому как оказалось, они создают после себя много «мусора» в системе.
Delphi 7.0 также был создан для .NET, потому как .NET платформо-независимая технология. .NET Framework может быть установлен в любой системе и проги написанные в Винде могут быть скомпилированы и работать в Юниксе и т.д.

>Мазут Береговой
О! Хоть кто-то, знающий что такое .Net
Не подскажите — на каких платформах уже сделали .NET Framework (Кроме Вин)? Или хоть где можно узнать — что из себя представляет эта технология, а не её возможности.

Подробности о технологии у производителя, объем ужасный
В Дополнение к Мазут Береговой (07.12.02 06:55) пользователю ничего не надо компилоровать, все делается автоматом при первом запуске программы. Инсталляция делается путем создания папки и запуска, деинсталляция простым удалением папки/программы, за всем следит операционная система. Как сказано система платформно не зависимая + еще и процессорно независимая, при налиции должной инфраструктуры неважны ни платформа ни процессор, программа компилируется под них при запуске.
В следующем году Юорланд должен выпустить Delphi 7 Studio for NET взамен текущей бета версии (Preview)

Для Anatoly Podgoretsky © (07.12.02 11:55)

Пока только есть порт .Net под Windows98/NT4/2000/XP и FreeBSD (только частично и в стадии альфа-версии).
Сильнейшая зависимость от COM-технологии (а это реестр) — типа: «Сейчас стало гораздо проще разрабатывать COM/COM+-приложения в .Net».
Вы уверены, что конёк MS — технология COM/COM+ — уйдёт в небытие?
Ошибаетесь, не всё так просто.

Похоже, что Дельфи и Кайликс разойдутся разными путями. Кайликс будет напоминать старый Дельфи, а новый Дельфи — в принципе, будет более близк к Шарпу. Непонятно, чем руководствовались разработчики из Борланда, когда утверждали, что можно перенести с некоторой потерей код из Винды в Линукс.

Заметьте, что существует тенденеция к сокращению языков. Подавляющую часть пишут только на С++, Бейсике, Паскале. Шарп и Джаву рассматривать не будем, ибо очень близки к С++.

Мне кажется, что доля Паскаля и Бейсика сокращается, и доля С-подобных языков постепенно возрастает.

В случае появления .NET под Линукс, судьба Kylix не так уж будет и интересовать, под FreeBsd уже есть альфа версия

> Anatoly Podgoretsky © (09.12.02 10:39)

Я и не знал. Спасибо за информацию.

Не лучше ли Java изучить, чем бросаться в объятия MS? Сервак-то у них будет ой как много стоить, а за лицензии надо платить. Кстати, Net-сервер до сих пор на стадии разработки.:)

> iZEN © (09.12.02 11:10)

Среди минусов Джавы отмечают низкую производительность (даже ниже, чем в VB), отсюда высокие требования к оперативной памяти. К тому же, существует куча компиляторов(интерпретаторов), что в них можно запутаться. Как человек, просвещенный в этой области, что Вы на это скажете?

А неплохо было бы заняться Джавой. Тут должен быть компромисс между мощностью и сложностью C++ и быстротой разарботки, простотой языка VB. Delphi очень удачно вписывается в эту нишу. Но. стоимость Delphi, плюс последние не очень внятные версии (так и не понял, чем кардинально отличаются шестерка от пятерки) и куда идет Delphi (не говорите, что под Net). А развите Delphi как языка, скорее всего уже прекратилось, начиная с 4-й версии (ИМХО). Но как человек практичный, я сомневаюсь в возможностях Джавы. К сожалению, аргументировать ничем не могу, ибо никогда не писал и не видел полноценных программ, сделанных на Джаве :(

А по-моему, у кого-то очко играет:-)

>I»m quite sure Borland will succeed in making a better
>Visual Studio than Visual Studio is. But when, oh when!

Не, ну как вам это нравится?

> LongIsland © (09.12.02 13:06)

Сомневаюсь. Мощь Microsoft впечатляет и подавляет.

Darts (09.12.02 11:33)

Среди минусов Джавы отмечают низкую производительность (даже ниже, чем в VB), отсюда высокие требования к оперативной памяти. К тому же, существует куча компиляторов(интерпретаторов), что в них можно запутаться. Как человек, просвещенный в этой области, что Вы на это скажете?

Это было 3 года назад.
К оперативке и Java и Net очень охочи.
Компиляторов для Java несколько (разобраться можно): стандартный Sun-овский (J2SE SDK 1.4.1), IBM, куча OpenSource-инструменотов. Начинайте со стандартного. Возьмите свободную IDE (NetBeans3.4, Eclipse, JBuilder 7 Personal). Почитайте книжку-букварь Брюса Эккеля ( http://www.javapower.ru/java/be/be_main.htm). И всё поймёте.

А неплохо было бы заняться Джавой. Тут должен быть компромисс между мощностью и сложностью C++ и быстротой разарботки, простотой языка VB.

Не сказал бы, что Java и Net проще VB/Delphi.
Но проекты на Java разрабатываются быстрее — это я говорю как Java/Delphi-разработчик. Java больше похожа на Object Pascal, чем на C++.

Delphi очень удачно вписывается в эту нишу. Но. стоимость Delphi, плюс последние не очень внятные версии (так и не понял, чем кардинально отличаются шестерка от пятерки) и куда идет Delphi (не говорите, что под Net).

Совсем не вписывается. Масштабируемость никуда не годится. Для малых проектов — да.

А развите Delphi как языка, скорее всего уже прекратилось, начиная с 4-й версии (ИМХО). Но как человек практичный, я сомневаюсь в возможностях Джавы. К сожалению, аргументировать ничем не могу, ибо никогда не писал и не видел полноценных программ, сделанных на Джаве :(

После корёжения языка от версии к версии Delphi Object Pascal стал для меня игрушкой как VB.

P.S. Мой сайт: http://izen.by.ru

> iZEN © (09.12.02 13:26)

Спасибо. Обязательно загляну.

Смотрите правде в глаза: Net завязан на COM-технологию и инструменты (VS.Net) от MS и никуда от этого не денешься.
Borland сидит на двух стульях: одновременно развивает Java-инструменты (JBuilder&BES — флагманские продукты) и подлизывается к Windows/Net.

Не совсем согласен, нов целом верно: Borland проиграл вчистую Microsoft на платформе Windows. Теперь, чтобы обезопасить себя, он дальновидно приготовил тылы. Типично партизанская тактика.

Посмотрите хотя бы, как мал круг программистов Delphi на Западе, и как ничтожна доля BCB. А ведь было время, я помню, в начале 90-х, казалось, что Борланд будет наравне с Microsoft делить рынок.

Саиый интересный и идеальный язык для меня, который поразил и сейчас поражает — это Forth. А все остальное — это так, не очень.
Причем Форт можно легко приспособить к любому процессору. Можно провести многие общие параллели.

«Причем Форт можно легко приспособить к любому процессору. Можно провести многие общие параллели . с Джавой»

Вот, теперь предложение по смыслу логически завершено и построено :)

MS владеет 10% (приблизительно) акций Borland.
Политика Borland направлена на интеграцию платформ, но не ОС.
Borland и Microsoft давно уже поделили между собой рынок средств разработки: Borland не занимается BASIC, MS не занимается PASCAL, всё остальное — на выбор. Они не конкуренты!

Интересно.
То есть получается что Borland исповедует следующее: «Один язык — куча платформ». Microsoft заявляет: «Куча языков — одна платформа».

«. Они не конкуренты!». Не совсем так. Delphi и VB — в чем-то их пути пересекаются. Не все же любят и пишут на C++, поэтому идет схватка за умы несишных разработчиков.

>Darts:
байт-машина явы, это, собственно, не что иное, как одна из разновидностей vm форта. %-)

Satanas Nobiscum! 09-Dec-XXXVII A.S.

Darts (09.12.02 15:08)

То есть получается что Borland исповедует следующее: «Один язык — куча платформ». Microsoft заявляет: «Куча языков — одна платформа».

Borland занимается интеграцией нескольких платформ.
MS занимается интеграцией в рамках одной платформы идей, что могла стырить.
«Один язык — куча платформ» — лозунг Sun Microsystems.

«. Они не конкуренты!». Не совсем так. Delphi и VB — в чем-то их пути пересекаются. Не все же любят и пишут на C++, поэтому идет схватка за умы несишных разработчиков.

Delphi и VB — непересекающиеся техники программирования. Уровень несколько разный. «Схватка» идёт за доминирование одной платформы над несколькими и за ограниченное множество языков, поддерживающих эту платформу. Языки толкают платформу, а не она их.

Ketmar © (09.12.02 15:49)
Да, я знал об этом, ибо я часто похаживаю на www.forth.org.ru

> iZEN © (09.12.02 15:56)

Давайте не будем спорить. Предлагаю мировую. Но не могу удержаться, от следующих ремарок:

«Delphi и VB — в чем-то их пути пересекаются».
Обратите внимание — «в чем-то». В основном пересекающееся множество, ИМХО, это область БД.

«..Языки толкают платформу, а не она их.»
Знаете ли, под новую платформу нужны новые языки.

Желаю успеха в жизни и грядущих делах и жму руку.

Хорошо. (Но мы не спорили, а обменивались мнениями).

iZEN, скажи пожалуйста, твой знание Jav»ы востребованы в твоем городе? Почему-то думаю, что это удел больших городов, как Москва или Питер, а в других — это диковинка.

В своём городе я не искал. У нас больше VBA, Delphi и 1C. :)
Программисты уезжают в Питер и Москву — нет работы, за которую будут платить подобающе (политика властей).

>Darts (09.12.02 16:13)
хм. я тоже на нашем фиге когда-то тусовался. даже что-то писал. потом пришлось бросить. %-(( сейчас вот sp-forth на машине стоит, а зачем. %-))

Satanas Nobiscum! 09-Dec-XXXVII A.S.

> Ketmar © (09.12.02 17:17)

Зря Форт-то бросил. У меня, к сожалению, другая ситуация. И хочется, и колется серьезного написать, пишу только, увы, наброски на скорую руку, а времени нету на более обстоятеьные вещи. ;()

В общем понятно.
MS толкает .NET
Sun – Java
Borland поддерживает всё и вся.


Интерфейс открыла новый курс «Microsoft .NET для пользователей Delphi»
http://www.interface.ru/training/news/pr021209484.htm

Я так понимаю, что новый Delphi.NET будет: Object Pascal + MS .NET Framework
про VCL придётся забыть?

Про VCL забыть ну никак не получится ;)
Borland не собирается повторять ошибок Microsoft в отношении миграции VB->VB.NET и Visual C++ dialect -> Managed C++
Мы делаем все для того чтобы обеспечить 100% переносимость кода между VCl и VCL.NET.

VCL.NET Preview ,который входит в update1 для зарегистированных пользователей Delphi обращается Win32 API через стандартные .NET InteropServices. Тот же .Net Framework является такой же оберткой вокруг Win32 API, только на C#.

Так что список методов, свойств, обработчиков событий, их видимость те же что и в обычном VCL. Понятно, что есть расширения языка Delphi (см. статьи на http://bdn.borland.com), Однако с точки зрения создания managed-приложений (то есть родных для .Net), все что делается в Delphi for .Net с использованием dccil, является 100% дотнетовской — можно взять Reflector и убедиться в этом.

Интересно, что Вы можете использовать сквозное наследование между Delphi for .Net и др. .Net-языками (С#, VB.NET и т.п.).
Кроме того, никто не мешает использовать mix между VCL.NET и «контролами» .NET Framework. Ну а как будет развивавться VCL.NET, да и среда Delphi с точки зрения реализации — будем смотреть в 2003 году ;).

Кстати, буквально «только-только» опубликован полезный материал:
«Memory: from VCL via VCL for .NET to .NET»
http://bdn.borland.com/article/0,1410,29320,00.html

С уважением,
Сергей Орлик
Borland

>Darts (09.12.02 17:37)
>В миру Б.Т?
неа. в миру — Кэтмар или Кейт. Б.Т. — это в паспорте. лень менять %-)

>Зря Форт-то бросил.
знаете, если б у меня было время и машина дома, я бы и не бросил. тем более, что были идеи когда-то. но увы — сейчас надо писать быстро. а форт — там я не могу быстро. там мне всегда хочется сначала ПОДУМАТЬ, а потом писать. чтобы код получался красивый. нету сейчас возможности думать, делать надо %-) вот и отошел. но кто сказал, что это насовсем? я до сих пор форт люблю. и не оставляю надежды вернуться.

Технология Клиент-Сервер 2002’3
Home Поиск Издания Контакты k-press.ru

Компания Borland выпустила новую, 7-ю, версию своего флагманского продукта – Delphi. Это событие прошло довольно тихо, без той помпы, с какой представлялась Delphi 6. Впрочем, ничего удивительного в этом нет. Скорее всего, маркетинг-менеджеры и пиарщики Borland копят силы для Delphi.NET. Судя по тому, что компакт-диск содержит не только Delphi 7, но и Delphi .NET Preview, выход этого продукта уже предопределен. Однако сейчас говорить всерьез о Delphi .NET преждевременно – очень многое в представленном Preview находится в стадии разработки, куча свойств и возможностей еще не оформилась окончательно, словом, до выпуска release-версии еще далеко. Поэтому правильнее будет говорить о Delphi 7, хотя в конце статьи я вкратце остановлюсь и на Delphi .NET Preview.

>Среда разработки претерпела, в основном, косметические изменения (рисунок 1). Несколько изменились тулбары и иконки – теперь они выполнены в стиле Windows ХР. Стоит также отметить несколько некрупных, хотя и приятных улучшений.

Редактор кода теперь позволяет подсвечивать код на разных языках – C#, C++, HTML, и других. Эта возможность представляется довольно странной для продукта, созданного для работы с Object Pascal, но её полезность несомненна. Скорее всего, это еще один шаг Borland навстречу .NET.

Появилась возможность выбора сообщений и подсказок, выдаваемых компилятором при сборке проекта. Для этого предназначена закладка Compiler Messages окна Project Options (рисунок 2). Список сообщений можно расширить, подгружая их с сайта Borland.

Улучшилась работа Code Insight. Теперь можно редактировать и расширять автоматическое завершение кода, создавая собственных экспертов. Кстати, теперь автоматически дополняется не только Object Pascal, но и HTML (рисунок 3.).

Слегка изменился интерфейс отладчика. Например, появилась возможность группировки Watches и отображения разных групп на разных закладках.

Изменения в компонентах пользовательского интерфейса, на мой взгляд, несущественны, что не удивительно – в этой области трудно придумать что-то принципиально новое.

Хуже то, что и в более существенных областях новостей мало, да и те, что есть, носят, так сказать, не качественный, а количественный характер. Так, в области работы с БД практически ничего не изменилось, кроме поддержки IB 6.5 и появления драйвера Microsoft SQL Server для dbEхpress. Стоит упомянуть, что наконец-то произошло официальное отречение от BDE. Borland заявил о нежелательности использования BDE для работы с серверами баз данных. Однако в целом, если речь не идет об Internet-приложениях, причин для перехода на новую версию немного.

Разработка Internet приложений

Основные нововведения Delphi 7 связаны с Internet технологиями. Здесь действительно заметны различия новой и старой версий. Однако обо всем по порядку.

Прежде всего, стоит отметить расширение поддержки Web-сервисов. В Delphi 7 появилась поддержка UDDI (Universal Description, Discovery and Intergration), стандарта размещения и поиска Web сервисов, вложений в SOAP-сообщения, настройки отображения объекта в SOAP-представление. Это стало возможным благодаря появлению методов TRemotable.ObjectToSoap и TRemotable.SoapToObject. Есть и другие, менее значительные изменения.

О поддержке UDDI хотелось бы рассказать подробнее. UDDI – это общий формат регистрации сервисов, доступных через Web. Сейчас существует ряд открытых реестров, предоставляющих информацию о Web-сервисах. В идеале они должны содержать одну и ту же информацию. На самом деле, конечно, их содержание различается.

UDDI-реестр содержит не просто информацию о Web-сервисах. Этот формат, в принципе, позволяет описать любую область деятельности. Вхождения UDDI-реестра организованы иерархически. Дерево реестра содержит род деятельности, включающий сервисы разных типов, каждый из которых, в свою очередь, содержит детальную информацию о себе. Эта детальная информация носит имя TModel. Таким образом, Web-сервис, включающий один или несколько доступных интерфейсов, описывается одной TModel. Ветка реестра, соответствующая некоторому роду деятельности, или, скажем, какой-либо организации, может включать набор Web-сервисов и другую информацию. TModel может содержать самые разнообразные сведения, например, описание сервиса, контактную информацию и технические детали типа WSDL-документа.

Представьте некое ООО «Рога и копыта». Его деятельность естественно делится на отделы рогов и копыт. Отдел рогов делится на подотделы скупки рогов у населения и поставки рогов заказчикам. С каждым из этих отделов может быть сопоставлен Web-сервис, и, соответственно, для каждого из этих сервисов будет существовать TModel. То же справедливо и в отношении отдела копыт. Кроме этого, есть Web-сайт, который содержит информацию для поставщиков и заказчиков. Это не Web-сервис, но информация об этом сайте тоже будет храниться в виде TModel в ветке реестра «Рога и копыта».

В Delphi 7 для работы с UDDI предназначены UDDI-браузер и WSDL Importer. Их назначение полностью соответствует названиям – первый предназначен для поиска и просмотра UDDI-реестров, а второй – для импорта найденных с помощью браузера WSDL-файлов. По WSDL-файлу Importer генерирует скелет серверного или клиентского – в зависимости от заданных опций – кода. Это может значительно сократить время на разработку Web-приложения.

Как же выглядит теперь создание простейшего серверного приложения, реализующего Web-сервис?

Для этого нужно выбрать File|New|Other, и двойным щелчком по иконке Soap Server Application на закладке WebServices запустить SOAP Server Application wizard. Этот мастер создает новое приложение, включающее компоненты, необходимые для ответов на SOAP-запросы.

При закрытии мастер спрашивает, нужно ли определять интерфейс Web-сервиса. Тут есть два пути.

Можно ответить «да». Это приведет к запуску Add New Web Service wizard, который добавит код, объявляющий и регистрирующий вызываемый интерфейс Web-сервиса. Остается вписать собственно реализацию Web-сервиса.

Можно сказать «нет», и воспользоваться уже упомянутым WSDL Importer. Если найдется подходящий WSDL-файл, Importer сгенерирует интерфейсы, классы и код регистрации. Останется только написать тела методов – увы, этого никакой мастер не делает. Но, собственно, за это программистам и платят деньги.

В Delphi 7 появилась такая штука, как IntraWeb – новая технология создания Web-приложений от фирмы AtoZed (вообще, если так пойдет дальше, Delphi станет похожа на дистрибутив Линукса – куча приложений от разных производителей, объединенных под одной обложкой).

IntraWeb – это разработка форм Web приложений, ничем не отличающаяся от разработки обычных форм. В результате получается приложение, генерирующее обычные HTML-страницы с кодом на JavaScript. Такой подход дает определенный выигрыш в простоте и наглядности разработки, а следовательно, и в её сроках.

Выдача результатов в HTML обеспечивает совместимость с самыми распространенными браузерами – Internet Explorer, Netscape и с наконец-то добравшейся до релиза Mozilla. IntraWeb можно использовать для расширения ранее созданных приложений WebSnap и Web Broker. IntraWeb может создавать приложения для следующих платформ (рисунок 4):

Apache и Apache 2;№

При разработке для этих платформ IntraWeb выступает как самостоятельная технология, а при работе с WebSnap- и Web Broker-приложениями с помощью IntraWeb проектируются отдельные формы, подключаемые к основному приложению (рисунок 5).

Значительно расширен набор компонентов Indy (Internet Direct). Теперь Indy имеет версию 9 и занимает четыре закладки в палитре компонентов. Две из них – новые, Indy I/O Handlers и Indy Intersepts.

Indy Intersepts – это компоненты-перехватчики событий, например, попытки подключения или передачи данных.

Indy I/O Handlers содержит компоненты-обработчики ввода/вывода.

Подробно рассматривать отдельные компоненты нет никакой возможности – их слишком много. Возможно, самые интересные из них мы когда-нибудь опишем отдельно.

Rave Reports

В Delphi 7 появился новый генератор отчетов Rave Reports, разработка компании Nevrona. Ранее использовавшийся Quick Report по прежнему поставляется в составе Delphi, но по умолчанию устанавливается именно Rave Reports. Новый генератор отчетов – это самостоятельное приложение, однако тесно интегрированное с Delphi. Rave Reports поддерживает как VCL, так и CLX. Создавать формы отчетов можно в достаточно удобном визуальном редакторе.

Rave Reports может работать с БД через ADO, BDE и dbEхpress. Это делает его совместимым практически со всеми популярными серверами БД.

Новый генератор позволяет выполнять определяемые разработчиком действия до и после составления отчета, а также перед и после печати этого отчета с помощью отслеживания событий OnBeforePrint, OnAfterPrint, OnBeforeReport и OnAfterReport. Обработчики этих событий пишутся на встроенном в генератор языке, хотя, несомненно, большинство программистов предпочли бы очередному языку нечто знакомое, хотя бы VBA.

Сервер отчетов Rave Reports позволяет формировать и просматривать по сети через Web браузер.

Model Maker

В новой версии в состав Delphi вошло CASE-средство Model Maker, что само по себе очень хорошо. Model Maker – это отдельное приложение, позволяющее создать модель, в дальнейшем автоматически конвертируемую в код Delphi. Справедливо и обратное – код может быть импортирован в Model Maker, и на его основании будут сгенерирована диаграмма классов. Существует возможность построения Use case диаграмм, диаграмм активности (Activity diagramm), диаграмм последовательности (Sequence diagramm), диаграммы состояний (State diagramm), диаграмм взаимодействия (Collaboration diagramm). Model Maker понимает UML, включает в себя специализированные редакторы для классов, UML-диаграмм, исходного кода, а также средства, облегчающие документирование разработки. Увы, последние, как встарь, ориентируются на устаревший формат WinHelp.

К сожалению, Model Maker входит только в Enterprise edition, пользователям Delphi Professional его только покажут в виде 30-дневной trial-версии.

Delphi for .NET Preview

С тех пор, как Microsoft выдумал очередное магическое слово (то есть .NET), у многих фирм-разработчиков ПО возник непреодолимый творческий зуд. Появилось уже несметное количество продуктов, программок, языков и язычков с именами в формате *.NET. Те же, кто еще не выпустил ничего подобного, уже клятвенно пообещали сделать это в ближайшем будущем. Единственным исключением стала, конечно, Sun – но ей сам бог велел держаться от этого подальше.

А вот в отношении Borland все как раз наоборот – Delphi, точнее, Object Pascal окажется совсем не лишним в семье .Net-языков. И разговоры о поддержке технологии .NET ведутся среди Delphi-фанов уже давно. Выход Delphi for .NET preview подтвердил реальность ожиданий.

Пока под громким именем Delphi for .NET скрывается одинокий компилятор, работающий в командной строке. Ни среды, ни набора компонентов пока нет. Документации не густо – 8 небольших HTML-файлов на тему «я знаю – город будет. «. Впрочем, эти файлы очень полезны для понимания того, как видит Borland интеграцию Delphi в .Net. Уже само появление такого продукта свидетельствует о серьезности намерений. Вопрос, нужен ли еще один язык программирования для .NET, излишен – больше всего такой язык нужен самому Borland, хотя бы для того, чтобы не потерять имеющихся пользователей.

Чтобы посмотреть на Delphi.Net поближе, нужно установить .NET Framework и собственно Delphi for .NET Preview. Традиционное приложение «Hello, World» в данном случае выглядит так:

Не правда ли, исходный код ничем не отличается от аналогичного кода для обычного Delphi приложения? Сохраним этот код в файле HelloWord.dpr. Теперь вызовем консоль и введем в командной строке:

Результатом выполнения вышеприведенной команды будет файл HelloWorld.exe, консольное приложение, выдающее одинокую надпись «Hello, World!». dccil – это компилятор Delphi for .Net. Ключ –V заставляет компилятор включить в результирующую сборку отладочную информацию, что позволяет производить отладку в отладчике из Microsoft.NET Framework SDK.

dccil позволяет скомпилировать и GUI-приложение:

Таблица 1.
Соответствие типов
данных
Object Pascal и .Net.

Тип Delphi

Тип .NET Framework ShortInt System.SByte Byte System.Byte SmallInt System.Int16 Word System.UInt16 Integer System.Int32 Cardinal/LongWord System.UInt32 Int64 System.Int64 UInt64 System.UInt64 Char/WideChar System.Char Single System.Single Double/Extended System.Double Boolean System.Boolean WideString/string System.String

Здесь куда лучше видны отличия от обычного Delphi-приложения. Уже в третьей строке (System.Windows.Forms;) появляется название пространства имен – понятия, не встречавшегося в прежних версиях Delphi. В Delphi базовой единицей хранения информации о типах и их реализации был юнит, а в .NET для хранения описаний типов служат пространства имен, что и заставляет использовать полное имя модуля. Строка System.Windows.Forms указывает, где лежит описание класса MessageBox. Каждое приложение Delphi for .Net неявно определяет свое пространство имен, совпадающее с именем проекта, и именно в нем находятся все модули проекта.

Названия юнитов теперь также включают полные наименования пространств имен. Например, в исходных текстах Delphi for .NET preview можно увидеть файл Borland.Delphi.System.pas.

В .Net-приложениях, разумеется, можно использовать только типы данных, поддерживаемые .NET (таблица 1).

Расширение .Net Framework-
helper-классы.

Цель Borland отнюдь не в том, чтобы сделать Object Pascal. Net. Нужно еще и добиться переносимости старых приложений, для чего нужна поддержка VCL, а не объектной библиотеки .NET. Для этого Borland предлагает использовать механизм helper-классов.

Очевидно, что разработчики, переходящие на новую версию Delphi, независимо от её номера и суффиксов, не захотят терять имеющихся наработок. Однако значительная часть функциональности, доступной Delphi-разработчикам, уже реализована в виде .Net-COMпонентов, а простой перенос VCL-компонентов в .Net является очень трудоемким и избыточным решением.

Helper-класс – это класс, содержащий дополнительные методы, расширяющие функциональность основного класса. Использование helper-класса – это не форма наследования, а способ обеспечения расширения функциональности базового класса. Синтаксис объявления helper-класса таков:

Обычно перед helper-классом идет объявление типа:


А за ним уже собственно объявление класса

Теперь существующий Delphi-код, ожидающий наличия у типа TMyClass функции ExistingDelphiFunc, будет работать как ни в чем не бывало.

Хорошим примером может служить класс System.Object, являющийся предком для всех .NET классов. В Delphi ему соответствует класс TObject. В Delphi for .Net TObject не наследуется от System.Object. Вместо этого он объявлен helper-классом для System.Object. Это позволяет использовать такие отсутствующие в System.Object методы, как ClassName и ClassType. Компилятор, не найдя реализаций ClassName и ClassType в классе System.Object, обратится к helper-классу и возьмет их оттуда. Таким образом, helper-классы позволяют использовать в .Net возможности, реализованные в VCL.

Изменения в языке

Перенос Delphi на .Net – это не просто портирование на очередную платформу. Создание .Net-версии потребовало от Borland создания новых кодогенератора, линкера, runtime-библиотеки, и, разумеется, изменений в синтаксисе языка. Чтобы полностью вписаться в рамки CLR, некоторые свойства языка пришлось выкинуть, а другие – переработать.

Уже сейчас можно понять, как в итоге будет выглядеть .Net-версия языка. Это будет старый добрый Паскаль, ужасно напоминающий по возможностям C#. Однако некоторые возможности сейчас находятся в разработке, и детали их реализации постоянно изменяются. Поэтому я просто коротко перечислю их, не вдаваясь в подробности:

Sealed-классы. Новое ключевое слово Delphi – sealed. Атрибут sealed применяется к классам. Sealed-класс не может быть расширен никаким CLR-потребителем (ни Delphi, ни каким-либо иным языком). Эта возможность необходима – она применяется в библиотеках .Net Framework.

Final-методы. Новое ключевое слово Delphi – final. Применяется к методам классов. Методы с атрибутом Final не могут быть подменены в производном классе. Также необходимы для совместимости с .Net Framework.

Илон Маск рекомендует:  Триггеры oracle forms для начинающих

UTF-8 Unicode-символы в исходном коде. Вообще-то, лучше было поддержать просто Unicode, тогда можно было бы писать просто на русском языке.

Невиртуальные методы в записях.

Данные классов (статические).

Свойства классов (статические).

Методы классов (статические).

Виртуальные методы в helper-классах.

Широковещательная рассылка событий. Оператор присваивания будет иметь singleton-семантику для традиционного присваивания событий Delphi. Планируется позволить использовать оператор ‘:=’ для замены последнего присвоенного события, не влияя на события, назначенные внешними managed-потребителями. Присваивание значения nil удаляет последнее присвоенное событие.

Другая внутренняя реализация Variant. Семантика Variant теперь поддерживается как TObject, а не как TVarData.

Автоматическая упаковка value-типов в CLR-объекты.

Возможности, более не поддерживаемые языком, перечислены в таблице 2.

Таблица 2. Возможности Object Pascal,
не поддерживаемые в Delphi for .Net.

Возможность языка Комментарий
Real48 6-байтовый тип с плавающей точкой
GetMem(), FreeMem() и
ReallocMem()
Используйте динамические массивы или автоматическую реализацию паттерна dispose.
BlockRead(), BlockWrite()
Директивы Absolute , Addr, и @
TVarData, Variant Семантика Variant будет поддерживаться, но не как TVarData.
File of Такая конструкция не может быть реализована в .Net.
Нетипизированные параметры var и out Нетипизированные параметры const поддерживаются, как и раньше.
PChar В грядущем релизе будут поддерживаться указатели (unsafe managed-код).
Директивы automated и dispid
Выражение asm – вставки ассемблера
TInterfacedObject AddRef, QueryInterface и Release удалены. В preview-версии TInterfacedObject – это алиас для TObject.
Динамическая агрегация Динамическая агрегация интерфейсов не поддерживается CLR, поскольку не может быть статически верифицирована.
ExitProc

Заключение

Delphi 7 производит достаточно странное впечатление. С одной стороны, ощущается, что разработчикам не до новой версии, у них есть дела поважнее – подготовка .Net-версии. Большая часть основных дополнений и нововведений разработана сторонними разработчиками. Кардинальные улучшения практически отсутствуют. Перейти на новую версию разработчиков традиционных приложений могут вынудить только причины, не связанные с возможностями и достоинствами продукта – например, необходимость покупки новых лицензий на Delphi или переход к разработке Internet-приложений.

Однако это же заставляет надеяться, что в недалеком будущем нас ожидает интереснейший продукт – полноценное средство разработки .Net-приложений, выпущенное давним соперником Microsoft на рынке средств разработки.

Copyright © 1994-2020 ООО «К-Пресс»

Программирование на Delphi с алгоритмами и кодами (стр. 1 из 2)

Целью данной курсовой работы является выполнение заданий на Delphi по предмету “программирование на языках высокого уровня».

Данная работа содержит три задачи, написанные на Delphi. Это задачи на разные темы, в которых применяются различные элементы языка программирования и компоненты Delphi.

В первой задаче вычисляется сумма ряда, значение функции, погрешность и строится график функции. Во второй задаче вводим, выводим и преобразуем элементы массива. В третьей задаче используется графика, движение фигуры по определенному контуру.

Для создания программы использовались компоненты из вкладок Standard и Additional :

StringGrid – таблица для отображения каких-либо значений;

Label – компонента, для отображения не редактируемого текста;

Edit – компонент ввода-вывода текстовой строкиж

Panel – панель с надписью;

TChart – компонента для прорисовки графика.

Первые пять компонентов наиболее часто применяются при написании программ. Изменяя их свойства можно писать большое количество программ с разным содержанием задачи. Последний компонент из данного списка очень полезны при решении конкретных задач.

Помимо этого для решения третей задачи были использованы функции API, позволяющие управлять интерфейсом приложений Windows.

Процессор — Intel Pentium 233 МГц и выше

Операционная система — MicrosoftWindowsXP, Windows 2000

Оперативная память — 64 Мбайт (рекомендуется 128 Мбайт)

Пространство на жестком диске — 450 Мбайт

Монитор — SVGA или выше

Другое аппаратное обеспечение — CD-ROM, мышь

Создаем форму и изменяем необходимые свойства главной формы в окне свойств:

Height — ширина формы;

Width — длина формы;

Caption — название формы.

Добавляем на главную форму необходимые элементы управления:

Button – запуск вычислений, открытие окна графика, выход из программы;

StringGrid – отображение таблицы значений x, y, s.

Label – отображение не редактируемого текста;

Edit – ввод данных для вычислений.

Прописываем в компонентах Edit текст по умолчанию в свойство Text .

Изменяем свойства добавленного элемента управления StringGrid :

Пишем для кнопок алгоритмы, которые будут выполнять различные действия.Прописываем действие на открытие формы на главной форме работы.

Создаем отдельную форму для графика, на нее помещаем компонент TChart . Пишем команду ее открытия на одну из кнопок.

Запускаем программу с целью проверки ее работоспособности. Сохраняем проект.

План работы для второй задачи

Создаем форму и изменяем необходимые свойства главной формы в окне свойств:

Height — ширина формы;

Width — длина формы;

Caption — название формы.

Добавляем на главную форму необходимые элементы управления:

Button – запуск вычислений, открытие окна графика, выход из программы;

StringGrid – отображение таблицы значений x, y, s.

Label – отображение не редактируемого текста;


Edit – ввод данных для формирования массивов и вывода полученных числовых рядов.

Изменяем свойства добавленного элемента управления StringGrid :

Пишем для кнопок алгоритмы, которые будут выполнять различные действия.Прописываем действие на открытие формы на главной форме работы. Запускаем программу с целью проверки ее работоспособности. Сохраняем проект.

План работы для третьей задачи

Создаем форму и изменяем необходимые свойства главной формы в окне свойств:

Height — ширина формы;

Width — длина формы;

Caption — название формы.

Задаем для формы регион, в который она будет вписана.

Пишем алгоритм движения по кромке экрана.Запускаем программу с целью проверки ее работоспособности. Сохраняемпроект.

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

procedure Button4Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

uses Unit2, Unit4, Unit7;

procedure TForm1.Button4Click(Sender: TObject);

Form1.Close; // закрывает главную форму и приложение

procedure TForm1.Button1Click(Sender: TObject);

form2.showmodal; // показывает форму задания № 1

procedure TForm1.Button2Click(Sender: TObject);

form4.showmodal; // показывает форму задания №2

procedure TForm1.Button3Click(Sender: TObject);

form7.showmodal; // показывает форму задание №3

Как использовать в Delphi dll из .Net

Задача: разработать библиотечное приложение (работа с библиотечным сервером и субд oracle).
Для работы с библиотечным сервером используется протокол Z3950.
API — http://zoom.z3950.org/api/zoom-1.4.html
DLL под разные языки (кроме delphi): http://zoom.z3950.org/bind/index.html

На C# код, который работает:

Возможно ли использовать в Delphi dll, из других языков?
Может быть подскажите доступный пример или сможете реализовать это подключение? (работу оплачу).
Читаю, пробую разные варианты подключения dll из .Net, но пока получаю только фатальные ошибки.
Или проще забыть про этот вариант и разрабатывать приложение на другом языке?
Спасибо всем откликнувшимся.

PS: прошу сильно не пинать, за формулировки.

02.11.2013, 22:16

Как указатели из библиотеки dll на с++ использовать в delphi
Добрый день. Вопрос состоит в следующем, у меня есть библиотека на c++, из которой нужно утащить.

dll на с++ использовать в delphi
Уважаемые здравствуйте, хотел поинтересовать особенностью подключения dll на с++ в delphi, описание.

Delphi + Sqllite3.dll + Resource извлечь, подключить, использовать
Для работы с Sqllite требуется dll Sqllite3.dll которая обязана находится в папке рядом с.

Как подключить dll, написанную на C, к dll на Delphi
Добрый день! Нужно подключить dll написанную на C к dll на Delphi. Как это можно сделать и можно ли.

05.11.2013, 10:42 2 05.11.2013, 11:55 [ТС] 3

Накопленного кода нет, выбор языка и среды разработки обусловлен своим опытом.
А опыт в работе с delphi есть, а в C# несравнимо меньше. исходя из этого думал, что разработать в дельфи будет быстрее, но надо подключить специфическую функцию получения данных.

В C# (демо пример есть в VS 2005) подключается 2 dll файла, в них есть все классы по работе с библиотечным сервером (протокол Z3950), и в частности IConnectionFactory.

05.11.2013, 12:24 4

Ну, тогда смотрите, разбирайтесь.
Могу предположить, что это не COM, хотя окончательно сказать не могу.
Можно написать свою COM-обёртку над этими классами и так подцепить из delphi. Но лучше делать это на с++, т.к. ради одной обёртки завязываться на дотнет нехорошо.

Ну и по выбору языка, советую всё-таки C# тогда.
Подключение вашей либы — это только первая проблема, с которой вы столкнулись из-за выбора Delphi.

05.11.2013, 12:24
05.11.2013, 22:20 [ТС] 5
06.11.2013, 09:52 6
Visual Basic
06.11.2013, 10:59 [ТС] 7
07.11.2013, 09:16 8

Пока вы не совершили очень дорогую ошибку, накидаю вам сцылок из холиваров (в обратном хронологическом порядке):
Почему Delphi считают умершим?!
Pascal vs C++
Delphi vs All
Delphi умер?

Я там активно высказываюсь, может, это поможет вам принять правильное решение.

07.11.2013, 13:23 [ТС] 9

С удовольствием бы попробовал реализовать в Visual Studio.
Поставил себе Express 2013.
Структуру классов не знаю, читать только начал. Привычных компонентов из Delphi не увидел. Итого за день работы сделал очень мало.

В дельфи за день сделал нужный интерфейс, прикрутил поиск в библиотечной базе. Осталось извлечь данные с SQL сервера, и записать в таблицу Oracle (вот такой вот зоопарк).
Сделаю этот этап (заказчик просит к новому году), тогда снова можно вернуться к Visual Studio.
Мне как новичку очень не хватает визуальности. Попробовал еще SharpDevelop — тоже не увидел как быстро и визуально построить интерфейс.

07.11.2013, 13:23
07.11.2013, 13:23

Как использовать структуру в dll
Всем привет! Вопрос по использованию dll-библиотек. В общем как юзать библиотеку в delphi я знаю.

Как в dll вынести и использовать Indy компонент?
Случилась проблема, не могу Indy компонент, как и любой другой вынести в DLL для использования? Это.

Как правильно использовать функцию из DLL в Делфи?
Здравствуйте! Имеется датчик RF603, с интерфейсом Ethernet, а так же dll к нему и не большой.

DelphiSite

Наиболее читаемое

Преобразование Delphi приложений в Delphi .Net

Преобразование Delphi приложений в Delphi .Net 20.1. Данная глава вводит в особенности переноса существующего кода в DCCIL / Delphi. Net. Она также показывает элементы, которые больше не применимы и как их обойти, чтобы они могли правильно работать в .Net framework. Данная статья так также дает руководство по оценке преобразования существующего приложения для работы в .Net framework с помощью DCCIL / Delphi.NET. 20.1.1. Термины Данная статья сфокусирована на преобразовании и его последствиях для вашего Delphi кода. Поэтому, данная статья не является введением в .Net саму по себе, а только дает определение основных базовых терминов, относящихся к .NET. 20.1.1.1. CIL Common Intermediate Language или просто Intermediate Language (промежуточный язык). Это язык компилятора, который преобразовывает исходный код, пригодный для использования в рантайм. IL выполняет роль, подобную P-коду или интерпретируемому языку Java. Но также он отличается от них и реализован совсем иначе. 20.1.1.2. CLR CLR – это сокращение от Common Language Runtime. CLR – это основа NET framework и среда исполнения приложений, которые компилируются в IL. Вначале вам может показаться, что CLR очень похожа на интерпретатор P-кода, поскольку выполняет аналогичную роль, но это не интерпретатор простого P-кода, а много больше. 20.1.1.3. CTS CTS CLR – это сокращение от Common Type System. CTS включает предопределенные, базовые .NET типы, которые доступны в любом .NET языке. Это означает, что integer больше не определяется каждым компилятором, а встроен в CTS и поэтому integer полностью одинаков во всех .NET языках. CTS не ограничен только integer, а включает много других типов. CTS разделяет типы на две базовые категории: значения и ссылочные типы. Типы значений — это типы, которые записываются в стеке. Вы должны быть знакомы с термином – простой или порядковый типы. Типы значений включают integers, bytes и другие примитивы, структуры и перечисления. Ссылочные типы – это типы, значения которых сохраняются в куче, и ссылки используются для доступа к ним. Ссылочные типы включают objects, interfaces и pointers. 20.1.1.4. CLS CLS – это сокращение от Common Language Specification. CLS это просто спецификация, которая определяет, какие свойства языка могут и должны быть поддержаны для работы в .NET. 20.1.1.5. Управляемый код (Managed Code) Управляемый код – это код который компилируется в IL и исполняется с помощью CLR. Основная цель любого .NET приложения – это быть 100% обслуживаемым кодом. (От корректора: Ну, блин сказал. J) 20.1.1.6. Неуправляемый код (Unmanaged Code) Неуправляемый код – это откомпилированный в машинные инструкции, который получен с помощью Delphi for Windows. Неуправляемый код также включает код DLL, COM серверов и даже Win32 API. Основная цель любого .NET приложения – это не имееть такого кода. 20.1.1.7. Сборка (Assembly) Сборка это коллекция .NET IL модулей. Это очень похоже на пакеты в Delphi и Delphi .NET трактует .NET сборки аналогично пакетам Delphi. 20.1.2. Компиляторы и среды ( ) — Component Library for Cross Platform — CLX относилось к новой версии кросс платформенной части VCL, которая базировалась на QT и могла работать как в Linux, так и в Windows. Теперь же, после выхода Delphi 7, Borland реорганизовал и переопределил значение данного акронима. Это может привести в большое замешательство, по этому примите во внимание. Начиная с Delphi 7 новое назначение следующее:·CLX — CLX относится ко всем компонентам включенным в Delphi, C++ Builder и в Kylix.·VCL — VCL относится к визуальным компонентам, которые работают напрямую с Win32 API.·Visual CLX — Visual CLX относится к кросс платформенным визуальным компонентам, которые базируются на QT, доступны и в Delphi и в Kylix.·VCL for .NET — VCL for .NET относится к новой VCL, которая запускается под .NET и предоставляет слой совместимости для старых приложений и плюс дополнительную функциональность. Если вы посмотрите на новые определения, я не уверен, что они согласованы. Я думаю в будущем они приведут к будущим недоразумениям. Я думаю NLX (Nelix?), или NCL (Nickel?), или что ни будь еще более more совместимое будет лучшим выбором для VCL .Net. Как видим, Visual CLX – это подмножество от CLX, не VCL for .NET – это родной брат VCL, как и Visual CLX. Это должно выглядеть так:·VCL CLX·CLX Visual CLX·Visual Parts of VCL VCL Хорошо, пусть это все будут мечты. 20.1.3.5. Среда VCL for .Net Среда VCL for .NET относится к новому VCL, который работает под .NET и предоставляет уровень совместимости для старых приложений и добавляет дополнительную функциональность. Среда VCL for .NET позволяет сделать более быстрый перенос существующих приложений, аналогично Win32 VCL и CLX. Это позволяет продолжать разработку кросс платформенных приложений. Это важное свойство, которое позволяет продолжать поддержку Windows приложений без .NET framework и также Linux. 20.1.3.6. Что выбрать WinForms или VCL for .Net? Это область для сомнений у пользователей – должен я использовать WinForms или VCL for .NET для разработки GUI? Следующая таблица сравнений позволит вам сделать правильный выбор. Должны быть установлены жесткие правила, но каждое приложение должно обслуживаться независимо. VCL for .Net WinForms Большой размер дистрибутива, поскольку должен включать дополнительные сборки. Малый размер дистрибутива, поскольку все сборки входят в состав .NET framework. Только для платформы Win32. Возможны подмножества для compact .NET framework for pocket PC’s. можно переносить на другие реализации .NET. Высокая степень совместимости со старым кодом. Требуются значительные изменения в существующем коде. Кросс платформенность с VCL for Win32 и с Visual Только для .Net framework. CLX for Linux (и Windows). Более эффективно в некоторых областях. Не поддерживает всю оптимизацию, которая есть в VCL. Дополнительные свойства и классы. Это включает дополнительные визуальные органы, но теряются такие вещи как списки действий (action lists), базы данных и многое другое. Не доступен полный исходный код. Не доступен исходный код Другая возможность – вы можете смешивать код. VCL for .NET и WinForms не исключают друг друга и могут сосуществовать в одном приложении. 20.1.4. Дополнения по переносу Некоторые из дополнений в Delphi .NET очень важны для переноса приложений, а некоторые нет. Данные вещи не являются жизненно важными и поэтому будут рассмотрены очень кратко. 20.1.4.1. Маппирование типов в CTS Что бы работать с .NET классами все языки должны использовать CTS (Common Type System). Delphi .NET может делать это просто, в дополнение к типам Delphi. Это может иметь место в ситуации, когда обычный Delphi код использует один набор типов, а интерфейсы к .NET использует другой набор. В результате потребуется постоянное копирование данных туда и обратно, поэтому это не очень хорошая идея с .NET. Подобная ситуация аналогична ситуацией с COM. Ел избежание подобной проблемы, родные типы в Delphi .NET имеют их маппированые типы в CTS. Так что при объявлении Integer, это в реальности .NET Integer из CTS. Данная связь не ограничена только простыми типами, но также расширена и на объекты. Здесь приведен список некоторых подстановок: Delphi .Net Common Type System String System.String Variant System.ValueType Records System.ValueType Exception System.Exception TObject System.Object TComponent System.ComponentModel.Component 20.1.4.2. Пространство имен (Namespaces) Во избежание конфликтов и также как часть CLS (Common Language Specification), Delphi теперь поддерживает пространство имен. Каждый модуль теперь существует внутри пространства имен. Когда вы видите объявление подобное следующему:

Важно заметить, что VCL for .NET находится в пространстве имен и влияет на директиву uses.
20.1.4.3. Вложенные типы (Nested Types)
Вложенные типы позволяют объявление типов внутри другого объявления типа.
20.1.4.4. Пользовательские атрибуты (Custom Attributes)
.Net не имеет реализации подобной RTTI в Delphi. Вместо этого она поддерживает нечто подобное, названое отражение (reflection). Отражение выполняет роль подобную RTTI, но функционирует немного различно. Reflection зависит от атрибутов, исполняя некоторые из его функций. Для поддержки этого Delphi .NET имеет расширение в виде атрибутов.
20.1.4.5. Другие дополнения к языку
Delphi.NET also supports many new smaller additions to the language such as static class data, record inheritance, class properties, and more. Most of the enhancements relate to features of classes at the language level.
While useful and required by the CLS, they are not essential in porting applications.
20.1.5. Ограничения
Разработка в Delphi .NET требует использования некоторых ограничений. Эти ограничения требуют, что бы код Delphi, подчинялся требованиям и ограничениям .NET.
20.1.5.1. Не безопасные элементы
В Delphi 7 появилось новое свойство, названое «Unsafe». При компилировании вашего кода в Delphi 7, вы получите предупреждение об не безопасных элементах. Не безопасные элементы – это такие элементы, которые непозволительно использовать в .NET рантайм.
Данные предупреждения включены по умолчанию и серьезно замедляют работу компилятора. Поэтому если вы не компилируете код для .NET, то вы можете их отключить. Они производят, то что я назвал эффект «C++ effect». Они замедляют компиляцию и генерируют большое количество предупреждений, что приводит к высокому соотношению сигнал-шум «.
Delphi 7 может быть использован для разработки кода, который вы желаете перенести в .NET, но DCCIL не генерирует предупреждений об небезопасных элементах. Поэтому первый шаг – это откомпилировать код в Delphi 7 и затем удалить предупреждения об небезопасных элементах.
Delphi разделяет предупреждения на три группы – небезопасные типы, небезопасный код и небезопасное приведение.
20.1.5.1.1 Небезопасные типы
Небезопасные типы включают следующее:·Символьные указатели: PChar, PWideChar, and PAnsiChar·Не типизированные указатели·Не типизированные var и out параметры·File of ·Real48·Записи с вариантными частями (Не путайте с variants)
20.1.5.1.2 Небезопасный код
Небезопасный код включает следующее:·Абсолютные переменные (Absolute)·Функции Addr(), Ptr(), Hi(), Lo(), Swap()·Процедуры BlockRead(), and BlockWrite()·Процедура Fail()·Процедуры GetMem(), FreeMem(), ReallocMem()·Ассемблерный код·Операторы работы с указателями
20.1.5.1.3 Небезопасные приведения (Casts)
Небезопасное приведение включает следующее:·Приведение к экземпляру класса, если он не является наследником.·Любые приведения записей, тип record
20.1.5.2. Откидываемая функциональность (Deprecated Functionality)
Некоторые элементы были отброшены, так как они не совместимы с .NET и поэтому бесполезны. Многие из этих элементов вы уже знаете из ранних глав.·Тип Real48. используйте BCD или другие математические функции.·Функции GetMem(), FreeMem() и ReallocMem(). Используйте динамические массивы или net управление классами.·Процедуры BlockRead(), BlockWrite(). Используйте классы из .NET framework.·Директива Absolute ·Функции Addr и @. Используйте классы вместо блоков памяти.·Старые тип объектов Паскаль, ключевое слово object. Используйте только ключевое слово class.·TVarData и прямой доступ до потрохов variant. Семантика Variant поддержана, но только без прямого доступа до внутренностей.·File of — размер типов варьируется от платформы к платформе и не может быть определен во время компилирования и поэтому не может быть использован.·Не типизированные var и out параметры. Используйте директиву const для параметра или класс родителя.·Указатель PChar. В действительности Delphi .NET поддерживает PChar как не обслуживаемый код.·Директивы automated и dispid. Данные директивы неприменимы в .NET.·Директива asm – ассемблер не поддержан в .NET, код не компилируется в машинный код.·TInterfacedObject, который включает AddRef, QueryInterface и Release.·Динамические агрегаты – используйте implements. примечание: Implements не реализовано в текущей версии DCCIL.·ExitProc
20.1.6. Изменения
Borland инвестировал множество ресурсов в сохранение совместимости как только это возможно. И Delphi.NET – это пока еще Delphi, но некоторые вещи не могли быть сохранены для обратной совместимости.
20.1.6.1. Разрушение (Destruction)
Разрушение в Delphi .NET немного отличается. Большинство кода не потребует подстройки, но важно понять в чем же различие.
20.1.6.1.1. Явное разрушение. (Deterministic Destruction)
В обычном приложении Delphi разрушение объектов делается явно. Объект разрушается только тогда, когда код явно вызовет free или destroy. Разрушение может произойти как часть разрушения собственника, но в конце все равно будет код по явному вызову free или destroy. Данное поведение называется как Решительное, явное разрушение.
Явное разрушение позволяет больший контроль, но склонно к утечкам памяти. Оно также позволяет делать ошибки, когда на разрушенный объект есть несколько ссылок или ссылка делается на другую ссылку, а о разрушении неизвестно.
Разрушение требует позаботиться об очистке объекта (finalization) явным кодом в деструкторе и освобождением памяти используемой объектом. Поэтому деструктор должен позаботиться об обеих функциях,
Программисты Delphi часто трактуют эти обе роли как одну.
20.1.6.1.2. Не явное разрушение
.Net разделяет эти функции – финализации и освобождения памяти, поскольку памятью заведует .NET. .Net использует неявное разрушение. Если вы работали с интерфейсами, то семантика подсчета ссылок, используемая в интерфейсах аналогична.
Вместо явного разрушения, когда объект сам разрушается, CLR подсчитывает ссылки на объект. Когда объект больше не используется, то он помечается для разрушения.
20.1.6.2. Сборка мусора (Garbage Collection)
.Net использует сборку мусора, что бы очистить память используемую объектом. Это название процесса, который определят, что объект больше используется и освобождает занятую им память.
Сборка мусора .NET очень сложная и даже базовая информация заслуживает отдельной главы, если даже не статьи.
Подобно явному и неявному разрушению, сборка мусора имеет малое влияние на перенос приложения. Поскольку для процедуры переноса, сборка мусора является ящиком фокусника, который заботится о разрушении объекта за вас.
20.1.7. Шаги по переносу
Перенос приложений в Delphi .NET для большинства приложений будет очень значимым и потребует определенной осторожности. Для большинства объектно-ориентированного кода, проще чем кажется. Данная статья не может уменьшить количество работы по переносу, но поможет вам сделать это легче. Она позволит уменьшить количество ошибок и предназначена для быстрой реализации переноса.
20.1.7.1. Удаление предупреждений (Unsafe Warnings)
To remove unsafe warnings, load the target project into Delphi 7. With the unsafe warnings turned on, perform a build all. Delphi will produce a series of unsafe warnings. Each warning needs to be eliminated. This may easily be the biggest step in porting your application.
20.1.7.2. Модули и пространство имен
Директивы Uses должны быть преобразованы к использованию пространства имен.
Если код требует одновременного использования в Windows и в .NET framework данные модули должны использовать IFDEF как указано. Константа CLR определена в Delphi .NET.

<$IFDEF CLR>Borland. Delphi . SysUtils <$ELSE>SysUtils <$ENDIF>,

Что такое код delphi net

Материал является отрывком из готовящейся книги В.В. Фаронова по Delphi 8. А именно, глава первая — «Знакомство с Delphi 8».

Система программирования Borland ® Delphi™ For Microsoft ® .NET Framework — сложный программный продукт, дающий программисту все необходимые средства для создания программ любой сложности и назначения. Характерной особенностью системы является органичная поддержка новой технологии .NET. В этой главе приводится краткий обзор Delphi и технологии .NET.


Знакомство с технологией .NET

Технология .NET — это сравнительно недавнее изобретение программистов корпорации Microsoft. Ее разработчики поставили перед собой задачу создания единой универсальной платформы (базы) программирования, равно годящейся для разработки любых программ — будь то обычные Windows-приложения, приложения для работы с базами данных, Web- и Windows-службы, приложения для мобильных и переносных устройств и т. д.

Суть технологии

В основе технологии .NET лежит идея использования некоторого промежуточного машинно-независимого языка. В обычном программировании (с использованием любых существующих вне технологии .NET языков — от Ассемблера до ранних версий Delphi) программа, написанная в понятной для программиста нотации, компилировалась в последовательность машинных инструкций, «понятных» процессору. В новой технологии программа компилируется в термины машинно-независимого языка CIL (Common Intermediate Language — общий промежуточный язык) и сопровождается метаданными — подробными инструкциями как о самой программы, так и о всем необходимом для ее успешного выполнения. В момент, когда коды промежуточной программы (они называются управляемыми кодами) ставятся на исполнение, в дело вступает среда CLR (Common Language Runtime — общеязыковая среда исполнения), которая с помощью встроенного JIT-компилятора (JIT — just-in-time — вовремя, по мере надобности) 1 переводит управляемые коды в набор исполняемых машинных инструкций и обеспечивает разнообразные вспомогательные действия для исполняемой программы.

Идея использования машинно-независимого промежуточного языка не нова. Впервые она была высказана еще в 1958 г. американским программистом Мелвином Е. Конвеем (Conway) в журнальной статье «Proposal For An UNCOL» («Предложение по универсальному компьютерно-ориентированному языку»). Двухфазное кодирование имеет два существенных преимущества. Во-первых, предельно упрощается распространение программ. Переведенная в СIL программа может выполняться на любом компьютере, имеющем соответствующую среду исполнения. Причем в управляемый код включается вся системная информация, необходимая для нормального функционирования программы, так что отпадает необходимость в регистрации отдельных частей программы (объектов, модулей, динамических библиотек) в системном реестре.

Замечание:
В настоящее время технология .NET реализована для ОС семейства Windows. Существуют проекты переноса технологии в ОС FreeBSD, Mac OC X 10.2 и Linux. Однако распространение .NET на другие платформы затруднено, в основном, проблемами воспроизведения пользовательского интерфейса: экраны настольного компьютера, наладонного компьютера или мобильного телефона совершенно отличны.

Во-вторых, повышается защищенность программ и файлов: в управляемых кодах нет информации о файловой системе компьютера, на котором исполняется программа, или способах запуска программ, а среда исполнения сконструирована так, чтобы всемерно уберечь программно-аппаратные средства компьютера от атак вирусов, других злонамеренных программ, а также от программных ошибок.

Общеязыковая инфраструктура

Общеязыковая инфраструктура CLI (Common Language Infrastructure) — это набор перечисленных ниже спецификаций, определяющих различные аспекты технологии .NET.

  • Common Type System (CTS) — общая система типов. Определяет возможность взаимодействия программ и их частей, написанных на разных языках программирования. Каждый компилятор, вырабатывающий инструкции CLI, должен частично или полностью использовать CTS и никакие другие типы данных, кроме указанных в CTS. Набор перечисленных в CTS типов значительно превышает количество типов в реально существующих языках программирования.
  • Common Intermediate Language (CLI) — общий промежуточный язык программирования 2 . Это — язык инструкций абстрактного процессора. В этом отношении CLI — аналог байткода Java.
  • Extensible Metadata — расширяемые метаданные. В технологии подразумевается, что инструкции CLI помещаются в единицу распространения — сборку (assembly) — и сопровождаются метаданными, которые делают сборку полностью самоописываемым объектом. В метаданные помещаются имя и версия сборки, сведения о локализации, данные о типах, включенных в сборку, список внешних файлов (сборок), от которых зависит данная сборка и т. п.
  • Framework Class Library (сокращенно .NET Framework) — это библиотека классов, которые должна использовать любая программа в рамках технологии. Библиотека VCL Delphi в чем-то подобна .NET Framework. Разница между ними, прежде всего, состоит в том, что библиотеку .NET Framework можно использовать при создании программ на любом, поддерживающем технологию .NET, языке программирования. Более того, в Delphi (или в C#, J# и т. д.) вы можете расширять эту библиотеку новыми классами, которые затем могут использоваться в программах на других языках программирования.
  • Platform Invocation Service (сокращенно P/Invoke) — служба согласования платформ. Программы, исполняемые в .NET, предельно изолированы друг от друга и от средств операционной системы. Однако вне этих средств .NET Framework не может реально работать. P/Invoke реализует взаимодействие .NET Framework и операционной системы.
  • Extended Portable Executable (PE) File Format — стандартный формат исполняемых файлов в Win32, используемый для хранения объектов технологии. Он загружается обычным загрузчиком точно так же, как и любой другой исполняемый файл. Однако в его заголовке имеется бит, указывающий на то, что файл относится к технологии .NET. Обнаружив бит, загрузчик вызывает CLR, которая и производит обработку файла.

Библиотека классов и пространства имен

Замечательной особенностью новой технологии является ее объектная ориентация. Вместе с CLR в рамках программного продукта .NET Framework (этот продукт свободно доступен на сайте http://www.microsoft.com/) поставляется обширная библиотека классов, которую должна использовать новая операционная система с рабочим названием Longhorn (выпуск намечен на 2005-2006 гг.) и все работающие под ее управлением программы.

Классы в .NET Framework организованы в ветвящиеся иерархические структуры, которые называются пространствами имен . До технологии .NET практически все промышленные операционные системы (ОС) строились из крошечных «кирпичиков», которые назывались функциями API (Application Program Interface — интерфейс прикладных программ). Эти функции выполняли небольшие локальные задачи как для нужд самой ОС, так и для любой работающей под ее управлением программы. В системах с .NET Framework роль функций API играют объекты (экземпляры классов).

Общеязыковая среда исполнения

Общеязыковая среда исполнения (CLR) играет ключевую роль во всей технологии. Она поддерживает строгую систему правил и соглашений, которым должен следовать промежуточный язык. Этот язык представляет собой код, который называется управляемым. Важнейшим свойством CLR является то обстоятельство, что входной поток данных может представлять собой и неуправляемый код, а также управляемый и неуправляемый одновременно! Неуправляемые участки входных данных являются обычными машинными инструкциями, которые без изменений поступают в процессор. Указателем на то, что входной поток содержит управляемый код, является специальный бит в заголовке файла.

Управляемый код в общем случае порождает объекты с управляемым временем жизни. Такие объекты автоматически уничтожаются, когда надобность в них исчезает (например, завершает работу создавшая их программа). Таким образом, одной их замечательных способностей CLR является встроенная в нее борьба с утечкой памяти 3 .

Для создания объектов с управляемым временем жизни в управляемый код помещаются также метаданные, которые содержат подробные инструкции о порождаемых объектах, их свойствах, методах и событиях. Управляемый код перед запуском должен пройти процесс верификации (если только администратор не разрешил его пропустить). Процесс верификации определяет, будет ли код пытаться получить доступ к неправильным адресам памяти или производить другие неверные действия. Код, удовлетворяющий верификации, называется надежным (safe). Возможность верификации позволяет CLR обеспечивать высокий уровень изолированности объектов при минимальном снижении производительности. CLR использует метаданные, чтобы найти и загрузить классы, поместить их экземпляры в память, разрешить вызов программ, генерировать машинные инструкции, усиливать безопасность и устанавливать динамические контекстные границы.

CLR облегчает разработку компонентов и программ, объекты которых взаимодействуют с помощью языка. Объекты, написанные на разных языках, могут взаимодействовать друг с другом, и их поведение может быть тесно связанным. Например, вы можете определить класс и его потомка на разных языках или вызвать метод класса, написанного на другом языке. Межъязыковое взаимодействие возможно потому, что языковые компиляторы и инструменты целевой машины используют общую систему типов, определенную в CLI, и они следуют общим правилам для определения новых типов, а также их создания, использования, снабжения данными и связывания типов.

Компилирование в промежуточный язык CIL

При создании управляемого кода компилятор языка программирования, поддерживающего .NET (Visual Basic .NET, C#, J#. а с появлением Delphi 8 еще и Delphi 4 ) транслирует исходный код в набор машинно-независимых инструкций языка CIL.

Замечание:
Синтаксис того или иного языка никак не влияет на CLR. Однако некоторые языки (C#, Delphi), не имеют существенных синтаксических ограничений и позволяют использовать практически все возможности CLR.

Эти инструкции могут затем легко переводиться в машинно-зависимые. CIL включает инструкции для загрузки, сохранения, инициализации объектов, вызова их методов, а также для логических и арифметических операций, управления потоками, прямого доступа к памяти, поддержки исключений и др. Перед выполнением программы инструкции CIL преобразуются JIT-компилятором CLR в машинно-зависимые инструкции процессора.

Одновременно с инструкциями CIL производятся также метаданные. Метаданные описывают типы вашего кода, в том числе содержат описание каждого типа, сигнатуры вызова методов объектов, ссылки на членов вашего кода и другие необходимые при выполнении данные. MSIL и метаданные содержатся в выполняемом файле формата РЕ, который основан на расширенной версии опубликованного формата MS PE и общего объектного файлового формата, использующегося исторически для выполняемых программ. Этот файловый формат, который объединяет CIL-код и метаданные, предоставляет операционной системе компьютера исполнения всю необходимую информацию для создания объектов CLR. Присутствие в CIL-кодах метаданных позволяет коду описывать самого себя и, таким образом, отказаться от библиотек типов и языка IDL (Interface Definition Language — язык описания интерфейсов). CLR находит и извлекает метаданные из РЕ-файла по мере надобности в ходе прогона.

Компилирование CIL в машинные инструкции

Перед выполнением кода CIL он должен быть преобразован с помощью JIT-компилятора в машинные инструкции. В процессе компиляции JIT-компилятор подсчитывает также те участки кода, которые могут никогда не вызываться. Компилятор преобразует CIL по мере надобности и вставляет заглушки на место вызова любого метода. При первом же вызове кода заглушка передается JIT-компилятору, который заменяет заглушку реальным кодом. Такого рода обращения к компилятору производятся непосредственно из реальных машинных инструкций, ранее сгенерированных компилятором, что повышает скорость исполнения программ.

В ходе компиляции CIL-кода он передается верификационному процессу. Верификация проверяет код CIL и метаданные в поисках выхода из надежного кода. Надежность типов объектов есть надежность их изолирования от других объектов и надежность защиты их от ошибочного иди злонамеренного разрушения.

Во время верификации код проверяется на доступ к разрешенной памяти и вызов только правильно определенных методов. Например, не допускается обращение к полям, которые выходят за отведенные им границы. Дополнительно верификация проверяет правильность генерации машинного кода. Процесс верификации открывает доступ к правильно определенному надежному коду. Если встретился ненадежный код, возбуждается исключение.

Исполнение кода

CLR обеспечивает инфраструктуру, которая позволяет управлять процессом исполнения машинного кода, а также предоставляет различные службы, которые могут быть использованы во время исполнения. Перед вызовом метода он должен быть скомпилирован в машинные инструкции. Каждый метод, для которого есть CIL-код, должен вначале с помощью JIT-компилятора генерироваться в машинный и затем выполняться. Каждый следующий раз компилятор не вызывается, но используется созданный им код. Этот процесс повторяется до конца прогона.

Во время выполнения управляемый код получает дополнительное обслуживание, такое как сборка мусора, повышенная защита, взаимодействие с неуправляемым кодом, поддержка межъязыковой отладки , улучшение распространения программ и версионного контроля.

Автоматическое управление памятью

Автоматическое управление памятью есть один из сервисов, которые CLR обеспечивает во время управляемого исполнения. Сборка мусора управляет распределением и освобождением памяти. Это избавляет разработчика от необходимости писать соответствующий код. Автоматическое управление памятью решает типичные проблемы, такие как утечка памяти или попытка освободить уже уничтоженный объект.

Когда инициируется новый процесс, для него резервируется непрерывное адресное пространство, называемое управляемой кучей . Управляемая куча поддерживает указатель на следующий распределяемый в памяти объект. Первоначально он указывает на базовый адрес управляемой кучи. Все типы указателей распределяются в управляемой кучи. Когда создается первый указатель, память для ассоциированного с ним типа начинается с базового адреса кучи. При создании следующего указателя, память выделяется непосредственно за первым. Пока адресное пространство доступно, процесс продолжается описанным образом.

Распределение в управляемой куче идет быстрее, чем в неуправляемой. CLR просто наращивает значение указателя кучи, что почти также быстро, как при заталкивании данных в стек. Кроме того, так как новые объекты распределяются в памяти последовательно, приложение обращается к ним быстрее.

Оптимизирующая машина сборщика мусора определяет наилучшее время для удаления мусора. В процессе очистки он удаляет из памяти объекты, которые более не используются приложением. Для этого он исследует корни приложений. Каждое приложение имеет набор корней. Каждый корень либо ссылается на объект в управляемой куче, либо содержит NIL. Корни включают указатели на глобальные и статические объекты, локальные переменные и ссылки на объектные параметры в стеке потока и регистрах процессора. Мусорщик имеет доступ к списку активных корней, которые управляются компилятором времени исполнения и CLR. Используя этот список, он проверяет корни и строит граф, который содержит все объекты, которые порождены от корня.

Объекты, которые не содержит граф, не порождены от корней приложения. Мусорщик удаляет эти объекты из памяти. При этом он оптимизирует состояние управляемой кучи и нужным образом корректирует указатели.

Сборки

Если вы уже имели опыт работы с Delphi или Turbo Pascal, то заметите, что многие свойства сборок соответствуют свойствам модулей этих систем программирования.

Сборки могут быть статическими и динамическими. Статические сборки включают типы .NET Framework (интерфейсы и классы), а также нужные ресурсы. Статические сборки сохраняются на диске в виде РЕ-файлов. Вы можете использовать .NET Framework для создания динамических сборок, которые не сохраняются на диске и создаются (и запускаются) непосредственно в памяти. После выполнения динамическую сборку можно сохранить на диске.

Сборки созданы для упрощения распространения программ и для решения проблем версионного контроля, которые возникают в приложениях, основанных на компонентах.

В платформах Win32 возникают две проблемы совместимости версии.

  • Невозможно выразить версионные правила между частями приложения и обеспечить их реализацию силами ОС. Текущий подход руководствуется правилом обратной совместимости , которое часто трудно гарантировать. Определения интерфейсов должны быть статическими, раз и навсегда опубликованными и фрагменты кода должны поддерживать обратную совместимость. Более того, код обычно разрабатывается так, что в каждый момент времени на данном компьютере может быть установлена и запущена единственная версия объекта или DLL.
  • Нет путей согласования между наборами компонентов, которые собраны совместно, и набором, представленным в момент запуска.

Объединение этих двух проблем порождает конфликты DLL, когда инсталляция одного приложения может нарушить функциональность другого из-за того, что вновь установленный компонент или DLL не совместим с предыдущей версией. При возникновении такой ситуации у ОС нет средств обнаружения и устранения проблемы.

Windows 2000 (ХР) частично решает проблему с помощью двух приемов.

  • Windows 2000/ХР разрешает размещать вспомогательные DLL в ту же папку, что и исполняемый файл. Такие компоненты отыскиваются первыми и поэтому игнорируются другие версии.
  • Windows 2000/ХР блокирует файлы, которые помещаются в системную папку System32 при установке ОС, и не позволяет другим приложениям замещать их.

Для решения проблемы версионности сборки делают следующее.

  • Разрешают разработчику указывать версионные правила между различными компонентами.
  • Реализуют инфраструктуру поддержки версионности.
  • Реализуют параллельное (side-by-side) выполнение разных компонентов.

Параллельное выполнение объектов и приложений означает, что CLR дает приложению средства вызова той или иной версии DLL (объекта) для использования ее специфических возможностей. CLR разрешает параллельное исполнение произвольного количества разных версий одного объекта одновременно в рамках одной сборки.

Домены приложений

Исторически сложилось так, что параллельно запускаемые на одном компьютере программы всемерно изолированы друг от друга.

Приложения изолируются прежде всего из-за того, что адресные указатели зависят от процесса. Указатель, переданный из одного приложения другому, никак не может использоваться в нем. Более того, вы не можете из одного процесса обратиться непосредственно к другому. Вместо этого вы должны использовать механизм представителей (proxy), которые реализуют косвенные вызовы, как это делается в СОМ (Component Object Model — компонентная модель объектов).

Домены приложений репализуют безопасный процесс, который позволяет CLR изолировать приложения. Вы можете запускать различные домены в рамках единственного процесса с уровнем изоляции, который существует между отдельными процессами, и не заботиться о перекрестных обращениях и переключениях. Возможность запуска множества приложений в едином процессе существенно увеличивает масштабируемость серверов.

Изоляция приложений важна также для безопасности программ. Например, вы можете запускать управления из Web-приложения в единственном процессе браузера так, что управления не будут иметь доступ к другим данным и ресурсам.

Изоляция, обеспечиваемая доменами приложений, имеет следующие преимущества.

  • Ошибка в одном приложении не может повлиять на другое приложение.
  • Неправильное приложение может быть выгружено без выгрузки других приложений.

Замечание:
Нельзя выгрузить сборку или тип, но можно — домен.

  • Код, исполняемый в одном приложении, не имеет непосредственного доступа к коду или ресурсу другого приложения. CLR обеспечивает изоляцию путем предотвращения вызовов между объектами в разных доменах приложений. Объекты, которыми обмениваются домены, могут быть копиями или полученными через представителей. Если объект — копия, его вызов локальный. Это означает, что как получатель объекта, так и сам объект находятся в одном домене. Если объект получен через представителя, этот объект — удаленный. В этом случае получатель и объект находятся в разных доменах. Как следствие, доступ к метаданным объекта должны иметь оба домена, чтобы обеспечить правильную работу встроенному компилятору для вызова методов (в противном случае — ошибка).
  • Домены и сборки

    Перед запуском приложения вы должны загрузить сборку в домен. Запуск типичного приложения вызывает загрузку различных сборок в программный домен. По умолчанию, CLR загружает сборку в домен, который содержит ссылку на нее. Таким образом, код и данные сборки изолируются от использующего его приложения.

    Если одна и та же сборка используется несколькими доменами, ее код (но не данные) могут разделяться доменами. Это уменьшает затраты памяти. Этот метод подобен разделению DLL. Сборка называется доменно-нейтральной, если ее код может разделяться другими доменами в одном процессе. CLR решает, будет ли сборка доменно-нейтральной.

    Сборка не разделяется между доменами, если предоставляемые ею возможности нужны лишь одному домену.

    Знакомство с DELPHI 8

    Ограниченная поддержка технологии .NET была реализована еще в предыдущей версии Delphi 7 Studio. Однако в этой версии .NET могла и не использоваться. Версия Delphi 8, напротив, не может не использовать эту технологию. Для совместимости с предыдущими версиями в ней используются пространства имен Borland.VCL.XXXX, позволяющие ценой небольших изменений исходного кода в версии 8 компилировать и исполнять программы, написанные в предыдущих версиях. Однако, такая совместимость — мнимая, так как компилятор новой версии порождает инструкции языка СIL, которые могут исполняться только под управлением CLR.

    В этом разделе кратко рассматриваются новые возможности Delphi, связанные с переходом на новую технологию .NET.

    Устаревшие и новые средства Delphi


    Для того, чтобы Delphi соответствовал требованиям к языкам, вырабатывающим CIL, была проведена его модификация. В ходе модификации из языка убраны средства, которые не поддерживаются CLR, и добавлены новые.

    Устаревшие типы

    Прежде всего, речь идет об указателях. Указатели считаются небезопасным типом, так как код, содержащий указатели, нельзя проверить на безопасность. Запрещена любая арифметика указателей, а также обращение к функциям и процедурам New, Dispose, GetMem, FreeMem и ReallocMem. Вместо концепции указателей программы должны использовать два класса из CTS: IntPtr и Marshal. Первый — суть универсальный платформеннонезависимый указатель, открывающий доступ к механизму межплатформенного взаимодействия P/Invoke. Второй осуществляет маршализацию данных, то есть низкоуровневое взаимодействие процессов, включая упаковку/распаковку передаваемых данных.

    В следующем примере создается и используется указатель для размещения в нем целого числа.

    Запрещены типизированные и нетипизированные файлы. Безопасный код может использовать только текстовые файлы типа FileVar: TextFile. Для работы с не текстовыми файлами рекомендуется использовать объекты класса TFileStream. Например, следующая программа создаст файл, содержащий 5 случайных вещественных чисел.

    Записи не могут содержать вариантную часть, но могут — методы (см. ниже).

    В .NET Framework используются «широкие» символы (2 байта на символ). В связи с этим небезопасным считается тип PChar, который используется как ссылка на массив однобайтных символов. В то же время формат типов String в Delphi и CTS совпадает.

    Поскольку тип PChar в программах Delphi используется, в основном, при обращении в функциям API, вместо PChar следует использовать класс StingBuilder. Следующая программа прочитает заголовок активного окна:

    Устаревшие возможности кода

    Компилятор Delphi отныне не поддерживает встроенный ассемблер и директивы asm.

    Запрещено использовать функции прямого доступа к памяти, такие как BlockRead, BlockWrite, GetMem, FreeMem, ReallocMem, а также директиву absolute и функцию addr. Поддерживается операция @ (получение адреса).

    Новые возможности Delphi

    Как уже отмечалось, записи не могут иметь вариантных частей, но могут — процедуры и функции. Это в какой-то степени сближает их с классами. Вот пример объявления:

    Несмотря на похожесть, записи, конечно, не классы — в них нет механизмов наследования и полиморфизма.

    .NET позволяет интегрировать в единое целое код, написанный на разных языках, в которых используются, в общем случае, разные ключевые слова. Как быть, если в CTS определен класс, совпадающий с ключевым словом? В Delphi для этого можно использовать стандартный прием — составное имя. Например:

    Однако «путь» к классу может быть достаточно длинным, и составное имя окажется громоздким. В этом случае Delphi разрешает перед именем класса ставить символ «&» (амперсанд):

    Встретив такое описание, компилятор станет просматривать список доступных модулей в поисках типа Type и найдет его в модуле System.

    Существенным изменениям подверглось объявление класса. Дело в том, что Delphi и CLR по-разному трактуют области видимости секций private и protected: в Delphi члены, объявленные в этих секциях, видны всюду в пределах данного модуля. В CLR секция private объявляет члены, доступные только внутри методов класса, а секция protected — члены, доступные потомкам класса. В связи с этим, в Delphi перед названиями секций следует ставить спецификатор class — в этом случае области видимости в Delphi и CLR совпадут:

    Классы можно лишить потомков, а виртуальный метод — возможности перекрытия. Для этого объявление класса сопровождается директивой sealed, а объявление метода — директивой final:

    Приведенный выше пример лишь иллюстрирует синтаксис объявлений и по существу бессмыслен: если класс не имеет потомков, то ни один его метод не может быть перекрыт. Замечу, что следующее объявление ошибочно:

    Можно лишить возможности перекрывать только виртуальные методы, то есть объявленные с директивами dynamic, virtual или override.

    Две модели Windows-приложений

    Несмотря на то, что Delphi теперь всего лишь один из языков, поддерживающих .NET, сама система программирования Delphi имеет богатую историю, и миллионы программистов до сих пор с удовольствием работают с ней. Учитывая это, разработчики Delphi обеспечили максимально возможную совместимость (пусть — мнимую, см. выше) новейшей версии с предыдущими.

    С этой целью они создали пространства имен Borland.VCL.XXXX, почти полностью имитирующие библиотеку компонентов VCL (Visual Component Library — библиотека визуальных компонентов) предыдущих версий. В эти пространства имен вошли VCL-классы, хорошо известные по предыдущим версиям — TApplication, TForm, TButton, TCheckBox и т. д. Символы ХХХХ в названиях пространств имен совпадают с именами соответствующих модулей VCL. Например, пространство имен Borland.VCL.DB содержит классы, определенные в модуле DB библиотеки VCL (клас-сы для работы с базами данных). Класс TForm определен в пространстве имен Borland.VCL.Forms, в этом же пространстве определен класс TApplication, класс TButton — в пространстве имен Borland.VCL.StdCtrls, в этом пространстве объявлен также класс TCheckBox и т. д.

    Пространства имен Borland.VCL.XXXX являются прозрачными надстройками над пространствами имен классов, входящих в .NET Framework, но не закрывают их. Это означает, что вам доступны и классы .NET Framework. Чтобы создать Windows-приложение, базирующееся на классах .NET Framework, вы выбираете команду меню File > New > Windows Forms Application, для создания VCL-подобного приложения — команду File > New > VCL Forms Application.

    Работа с базами данных

    Отличительной особенностью системы программирования Delphi была и остается встроенная в нее возможность работы с различными промышленными базами данных (БД). Добрая треть компонентов VCL в Delphi 7 в той или иной степени связаны с созданием приложений для работы с БД.

    В .NET Framework встроена архитектура ADO.NET, решающая аналогичные задачи. Упрощенная схема этой архитектуры показана на рис.1.1.

    На этой схеме Источник данных — физическая БД или XML-файл с данными. Провайдер данных обеспечивает связь с Источником данных и передает ему команды. Набор данных предназначен для отображения данных. С любым источником данных (ИД) могут быть связаны один или несколько наборов данных (НД) и наоборот — единственный НД может отображать данные из нескольких ИД.

    Провайдер данных, входящий в архитектуру ADO.NET, обеспечивает взаимодействие наборов данных с такими ИД, как MS SQL Server, OLE DB и Oracle. В Delphi 8 можно использовать также провайдер BDP.NET (Borland Database Provider for .NET — провайдер баз данных корпорации Borland для .NET), который обеспечивает взаимодействие с серверами DB2, Oracle и InterBase. Дублирование в BDP.NET связи с промышленным сервером Oracle не случайно: корпорации Borland и Oracle связывает многолетнее плодотворное сотрудничество 5 . По оценкам разработчиков Delphi, управление сервером Oracle с помощью BDP.NET дает определенные преимущества по сравнению с управлением через провайдер ADO.NET.

    Наличие BDP.NET не ограничивает новаторского подхода разработчиков Delphi к интеграции с технологией .NET Framework. Связано это с тем, что изначально Delphi тяготела к приложениям для работы с БД в значительно большей степени, чем разработанная в Microsoft технология ADO (Active Data Object — активный объект данных), которая и легла в основу ADO.NET. Delphi 7, например, поддерживала такие технологии, как BDE (Borland Database Engine — машина баз данных корпорации Borland; обеспечивала доступ к файл-серверным БД на таблицах Paradox, dBASE и т. п.), dbExpress (набор скоростных драйверов для непосредственного доступа к некоторым промышленным серверам, в том числе — к MySQL), IBX (доступ к серверу InterBase на уровне его API-функций), DataSnap (разработка многозвенных СУБД) и ряд других.

    Delphi 8 определяет естественную миграцию этих технологий в новую среду. Для этого в ее состав включены такие дополнительные технологии:

    • TADONETConnector — универсальный класс (наследник TDataSet), который разработчики рекомендуют как наиболее простой и эффективный путь миграции существующих приложений с НД (например, TADODataSet);
    • dbExpress.NET — миграция технологии dbExpress;
    • DataSnap .NET Client — поддержка многозвенных СУБД;
    • IBX.NET — миграция технологии IBX;
    • BDE.NET — миграция технологии BDE.

    Поддержка этих технологий доступна только в режиме разработки VCL Forms Application.

    Работа с Интернет

    Работа с Интернет никогда не была в Delphi столь же эффективной, как работа с БД. И хотя уже в Delphi 2 была вкладка Internet (компоненты FTP, HTML, POP и т. д.) поддержке Интернет в Delphi всегда не хватало некоторой системности. Даже многочисленные компоненты Indy в Delphi 7 годятся лишь на то, чтобы создать «самопальный» Outlook Express или скромный Web-браузер. В то же время в Microsoft разработали технологию ASP (Active Server Pages — активные страницы сервера), которая во многом упрощала актуальную ныне задачу создания интерактивных Web-сайтов (например, для электронной торговли товарами и услугами) 6 . Технология ASP вошла в .NET Framework в виде ASP.NET и в полной мере доступна в Delphi 8. Для использования технологии ASP.NET на хостинге (то есть на машине, на которой развернут сайт) должен функционировать сервер Microsoft IIS (Internet Information Server — информационный сервер для Интернет корпорации Microsoft), а сам хостинг работать под управлением Windows 2000/ХР.

    Основой технологии являются компоненты Web-страниц, на которых размещаются серверные управляющие компоненты и HTML-текст. Страницы содержат внутренний код, обеспечивающий логику работы, и поддерживаются скомпилированными DLL. Когда пользователь впервые обращается к активной странице, ASP.NET автоматически создает и компилирует DLL, которая в конечном счете передает пользователю HTML-код. Этот код способен исполняться в браузере клиента. В результате значительная часть работы по взаимодействию клиента с сервером выполняется на машине клиента, что повышает пропускную способность хостинга.

    Активные страницы помимо HTML-текста могут содержать различные серверные элементы управления, например, обеспечивающие необходимую идентификацию пользователя, а также специализированные компоненты, такие как календарь, решетка с данными, навигатор, списки и т. п.

    Что такое код delphi net

    Изначально среда разработки была предназначена исключительно для разработки приложений Microsoft Windows, затем был реализован также для платформ Linux (как Kylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и, вскоре после этого, было объявлено о поддержке Microsoft .NET.

    Реализация среды разработки проектом Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет использовать его для создания приложений на Delphi для таких платформ, как Linux, Mac OS X и Windows CE.

    Также предпринимались попытки использования языка в проектах GNU (например, Notepad GNU) и написания компилятора [источник не указан 1261 день] для GCC.

    История языка

    Object Pascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

    Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

    Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal [4] .

    Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. [источник не указан 230 дней] Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp.

    • Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мультиязычных приложений (лишь для платформы .NET);
    • Последующие версии (обозначаемые годами выхода, а не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы .NET.

    Delphi for .NET — среда разработки Delphi, а также язык Delphi (Object Pascal), ориентированные на разработку приложений для .NET.

    Первая версия полноценной среды разработки Delphi для .NET — Delphi 8. Она позволяла писать приложения только для .NET. Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0.

    В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки JBuilder, Delphi и C++ Builder по причине убыточности этого направления. Планировалась продажа >[5] .

    Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland.

    В августе 2006 года Borland выпустил облегченную версию RAD Studio под именем Turbo: Turbo Delphi (для Win32 и .NET), Turbo C#, Turbo C++.

    В марте 2008 года было объявлено о прекращении развития этой линейки продуктов.

    В марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.

    В июне 2007 года CodeGear представила свои планы на будущее, то есть опубликовала так называемый roadmap [6] .

    25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009 [7] . Версия привнесла множество нововведений в язык, как то [8] :

    • По умолчанию полная поддержка Юникода во всех частях языка, VCL и RTL; замена обращений ко всем функциям Windows API на юникодные аналоги (то есть MessageBox вызывает MessageBoxW, а не MessageBoxA).
    • Обобщённые типы, они же generics.
    • Анонимные методы.
    • Новая директива компилятора $POINTERMATH [ON|OFF].
    • Функция Exit теперь может принимать параметры в соответствии с типом функции.

    Вышедшая в 2011 году версия Delphi XE2 добавила компилятор Win64 и кросс-компиляцию для операционных систем фирмы Apple.

    Компиляторы

    • Embarcadero Delphi (ранее наз. CodeGear Delphi и Borland Delphi) — наверное, самый известный компилятор, который является последователем Borland Pascal и Turbo Pascal. Используется Win16 (Delphi 1), Win32 (Delphi 2 и позже), Win64 (Delphi 16 (XE2) и позже), а также .NET 1.x, 2.0 (Delphi 8, Delphi 2005-Delphi 2007). Поддержка .NET, впоследствии выделена в отдельный продукт, известный как Oxygene.
    • Free Pascal (FPC) — свободный компилятор Оbject Pascal, который поддерживает различные диалекты Паскаля, включая Turbo Pascal, Delphi и собственные диалекты. На текущий момент, FPC может генерировать код для x86, x86-64, PowerPC, SPARC и процессоров ARM, а также для различных операционных систем, в том числе для Microsoft Windows, Linux, FreeBSD, Mac OS. Существует несколько сред разработки программного обеспечения для FPC (один из самых известных представителей — Lazarus).
    • GNU Pascal (отдельно разработанная версия из GCC). Не ставит целью продолжение серии диалектов Delphi, как составляющей Паскаля, но тем не менее содержит режим совместимости Borland Pascal, и очень медленно приспосабливает компоненты языка Delphi. Не подходит для компиляции больших проектов, содержащих код Delphi, но стоит отметить, что его поддерживают большинство операционных систем и архитектур.

    • Oxygene (ранее известен как Chrome) — компилятор Object Pascal, который интегрирован в Microsoft Visual Studio. Также доступный в виде компилятора с вольной командной строкой CLI. Использует .NET и моно платформы. В настоящий момент продаётся под маркой Embarcadero Delphi Prism.
    • M >Синтаксис языка

    Операторы

    Список операторов через пробел: := + — * / div mod not and or with xor shl shr ^ = <> >= @ in is as

    Этот раздел статьи ещё не написан.

    Выражения

    Выражения в Object Pascal (Delphi) бывают арифметическими, логическими и строковыми.

    Основные логические выражения:
    Логические выражения в основном употребляются в условных операторах. К логическим выражениям относятся такие операции как:

    • not — «НЕ», отрицание логического выражения (NOT )
    • and — «И», умножение (пересечение) логических выражений ( AND )
    • or — «ИЛИ», объединение логических выражений ( OR )
    • xor — «Исключающее ИЛИ», отрицание ИЛИ, все что не попадает под ИЛИ ( XOR )
    Этот раздел статьи ещё не написан.

    Типы данных

    Обрабатываемые в программе данные подразделяются на переменные, константы и литералы. Константы представляют собой данные, значения которых установлены в разделе объявления констант и не изменяются в процессе выполнения программы.

    Объекты

    Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Например:

    Как и в случае записей, для обращения к конкретному элементу объекта (полю, свойству или методу) указывается имя объекта и имя элемента, разделенные точкой, то есть имя элемента является составным.

    Классы

    В языке Object Pascal классы — это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа.

    Класс представляет собой особый тип, имеющий в своем составе такие элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные как правило для обработки полей. Свойства занимают промежуточное положение между полями и методами.

    Объектно-ориентированные особенности языка

    Инкапсуляция

    Объединение и скрытие объектных данных, а также обрабатывающих их методов внутри конкретного класса от пользователя называется инкапсуляцией.

    Наследование

    При создании новых объектов получить все свойства и методы от своих предков называют наследованием. Такие объекты наследуют после своего создания все поля, свойства, события, методы и прочее от своих предков. Наследование часто избавляет разработчиков от рутинной работы и позволяет не мешкая приступить к разработке чего-то нового.

    Полиморфизм

    Это методы различных объектов, которые могут иметь одинаковые имена, но по внутреннему содержимому отличаются друг от друга.

    Примеры

    Структура программы

    Каждая написанная программа на языке Delphi состоит из заголовка программы (program NewApplication;), поля используемых модулей Uses (к примеру, Uses Windows, Messages, SysUtils и т. д.), который может не входить в саму структуру, а также блоков описания и исполнения (начинаются составным оператором begin и заканчиваются end.).

    Пример № 1

    Вывод сообщения «Hello, world!» в консольном приложении Delphi

    Пример № 2

    Вывод сообщения «Hello, world!» в 32-разрядном GUI приложении Delphi

    Пример № 3

    Динамическое создание списка строк и запись его в файл

    Расширения файлов

    • .pas — исходный код модуля (pascal)
    • .dpr — исходный код проекта (pascal)
    • .dproj — исходный код проекта (xml)
    • .dproj.local — исходный код проекта (xml)
    • .dfm — исходный код формы
    • .dpk — скомпилированный пакет
    • .dcu — скомпилированный модуль
    • .exe — скомпилированное приложение
    • .res — ресурсы
    • .dsk — привязки к файлам
    • . >Известное программное обеспечение, созданное на Delphi

    Среди многих распространённых программных продуктов, написанных на Delphi, можно найти [9] :

    • Продукция Embarcadero: Embarcadero Delphi, Embarcadero C++ Builder, Borland JBuilder 1 и 2 версии.
    • Администрирование и разработка баз данных: MySQL Tools, IBExpert.
    • Инженерное программное обеспечение: Altium Designer.
    • Файловые менеджеры: Total Commander, Frigate.
    • Просмотрщики графики: FastStone Image Viewer, FuturixImager, drComRead.
    • Видео- и аудиопроигрыватели: Light Alloy, The KMPlayer, AIMP, X-Amp.
    • Программы мгновенного обмена сообщениями: QIP, R&Q, графический интерфейс Skype, The Bat!, PopTray, FeedDemon.
    • Создание музыки: FL Studio, Guitar Pro (до версии 6.0).
    • Разработка программного обеспечения: Dev-C++, DUnit, Game Maker, Inno Setup, PyScripter.
    • Веб-разработка: Macromedia HomeSite.
    • Текстовые редакторы: BirEdit, Notepad GNU, Bred.
    • Бухучёт и налогообложение: «ПАРУС», AVARDA (до версии 6.x включительно).
    • Программы для создания анимаций: Pivot Stickfigure Animator.
    • Программы для сжатия данных: ALZip, PowerArchiver, PeaZip.
    • Компьютерные игры: Age of wonders, «Космические рейнджеры», Venom. Codename: Outbreak, Space Empires V, «Правда о девятой роте».
    • Графические редакторы: Real Paint.

    Примечания

    1. В Великобритании доминирует произношение «дел-фи́»: вариант произношения, характерный для Великобритании (англ.) . Merriam-Webster Online Dictionary. Merriam-Webster. Архивировано из первоисточника 21 августа 2011.Проверено 1 октября 2008. , а в США — «де́л-фай»: вариант произношения, характерный для США (англ.) . Merriam-Webster Online Dictionary. Merriam-Webster. Архивировано из первоисточника 21 августа 2011.Проверено 1 октября 2008.
    2. Под таким названием он был разработан в фирме Apple в 1986 году группой Ларри Теслера.
    3. Delphi Language Overview
    4. Об этом говорят обозначения версий компилятора. Так, в Delphi 7 компилятор имеет номер версии 15.0 (последняя версия Borland Pascal / Turbo Pascal обозначалась 7.0, в Delphi 1 компилятор имеет версию 8.0, в Delphi 2 — 9.0 и т. д. Номер версии 11.0 носит компилятор Pascal, входивший в состав среды C++ Builder).
    5. Default Parallels Plesk Panel Page
    6. Delphi and C++Builder Roadmap
    7. Database Tools and Developer Software | Embarcadero Technologies
    8. Delphi from Embarcadero | RAD Application Development Software
    9. Good Quality Applications Built With Delphi — Delphi Programming (англ.) [неавторитетный источник?]

    Литература


    • Нил Дж. Рубенкинг. Язык программирования Delphi для «чайников». Введение в Borland Delphi 2006 = Delphi for Dummies. — М .: Диалектика, 2007. — 336 с. — ISBN 0-7645-0179-8
    • Хавьер Пашеку. Программирование в Borland Delphi 2006 для профессионалов = Delphi for .NET Developer’s Gu >М .: Вильямс, 2006. — 944 с. — ISBN 0-672-32443-X
    • А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько.Программирование на языке Delphi. Учебное пособие. — 2005.

    Ссылки

    Программирование на языке Delphi в Викиверситете ?
    • Страница среды программирования на сайте Embarcadero Technologies
    Pascal
    Диалекты

    Clascal • Concurrent Pascal • Delphi • Pascal • Object Pascal • Oxygene • SuperPascal

    C/AL • Delphi • Delphi Prism (Oxygene) • FrameworkPascal • HP Pascal • IP Pascal • PocketStudio • Prospero Pascal

    Как подключить delphi к объектам .net

    У меня есть полное понимание com или подключение к *.dll с LoadLibrary и GetProcess и т.д.

    Как связать структуру класса или объект в .net с кодом delphi, чтобы компилятор и редактор могли подключаться/относиться к .net?

    Подобно Delphi использует (cdecl) или (stdcall) для подключения к методам, которые структурированы по-другому. У нас есть оператор класса, структурированный по-разному в .net?

    Является ли память управляемой по-разному между .net и Delphi?

    Есть несколько способов вызова управляемого кода из неуправляемого кода. Самый простой способ - открыть COM-код из кода .NET. Взгляните на [текст ссылки] [1]

    Я тестировал продукт AtoZed "CrossTalk" для прямого вызова .Net из Delphi7 для одного из наших продуктов. (Вызовы представляют собой оболочку .Net 4 вокруг библиотеки изображений Atalasoft DotNet, чтобы извлекать и извлекать какую-либо финансовую заявку конечного пользователя из форм TIFF из загруженного многостраничного PDF файла).

    Существуют некоторые ограничения (такие проблемы обрабатываются некоторыми коллекциями .Net), но в целом CrossTalk работает до сих пор. (Я все еще должен проверять утечки ресурсов и т.д., Прежде чем принимать решение о покупке/нет-покупать). Любые ограничения, которые я ударил до сих пор, мне удалось решить, изменив оболочку .Net вокруг интерфейса поставщика, чтобы переформатировать объекты проблемы (например, общие коллекции) во что-то более легко потребляемое на стороне Delphi.

    Если вы застряли в старых версиях Delphi, таких как D7, вам также придется обойти синтаксические ограничения, которые вы не увидите с более новыми версиями Delphi, такими как D2006/D2007 и выше. Хуже всего, что я видел до сих пор, это то, что .Net статические функции, свойства и процедуры на уровне класса переведены с ключевым словом "статические"; которые D7 не понимает, но какие более поздние версии Delphi делают. Чтобы обойти это, когда вашей конечной целью является сторонний код, вам снова придется изменить настраиваемую оболочку .Net вокруг фактической цели, чтобы вывести эту проблему из уравнения.

    Теперь, когда моя оценка выходит за рамки функции, включенной в производительность, самая большая проблема, которую я видел до сих пор, - это небольшой выигрыш в производительности для каждого звонка; что-то порядка 8 сотых секунды. за вызов под профилировщиком (который замедляет работу) на виртуальной машине WinXP. Если вы делаете относительно небольшое количество вызовов через границу за использование, это, вероятно, не проблема. Но когда я протестировал перемещение массива байтов размером 1 МБ .Net по границе от .Net до Delphi, а затем с помощью преобразованного индекса ByteArray.Get_Item индексированного доступа в цикле Delphi For для доступа к каждому байту массива .Net, чтобы скопировать его в соответствующий Delphi массив байтов для использования с элементами управления Delphi GUI, что дополнительные накладные расходы вызвали значительную проблему. Это небольшое 0,08 мс. накладные расходы за одно время вызова 1 млн. "Для" Доступ к петлям через границу .Net-Delphi добавлен почти до 8 полных секунд. (Этот специальный тест функции выполнялся намного быстрее при использовании COM для передачи байтового массива).

    На самом деле было намного быстрее использовать код Delphi для преобразованного метода .Net System.Drawing.Image "Сохранить" (ToFile) и иметь "LoadFromFile" Delphi TImage, чем для доступа 1M, необходимого для перемещения байтовый массив по одному элементу за раз, но все в памяти.

    Я работаю над этой проблемой с поддержкой AtoZed, чтобы узнать, есть ли способ обойти это и опубликует результат после того, как у них будет достаточно времени для его решения. Массив байта 1 Мбайт был телом отсканированного изображения формы.

    Отличная вещь и причина, по которой я хочу работать с ними, чтобы исправить эту проблему, заключается в том, что ваш код Delphi может создавать, потреблять и утилизировать собственные .Net-объекты вместо того, чтобы обойти все, что может быть маршалировано через границы COM, (Я видел жалобы в Интернете о утечке ресурсов с помощью COM для таких кросс-инструментальных взаимодействий из-за проблем, связанных с объектами, расположенными на стороне Net. Возможно, это было из-за плохого кода, но об этом нужно подумать.) не нужно использовать SafeArrays, которые используются для сортировки массивов через COM и отдельные интерфейсы для каждого настраиваемого бизнес-объекта. CrossTalk также сталкивается с необходимостью отмечать все сборки .Net ComVisible, которые должны установить сборки .Net COM в GAC, если вы не можете контролировать, где они расположены, относительно вашего кода Delphi и т.д.

    ASD-SOFT

    Программирование. Теория и практика.

    WinInet в Delphi. Начало. HTTP запрос.

    Здравствуйте уважаемые коллеги!

    Библиотека WinInet, или Win32 Internet Extensions, предоставляет набор API функций для работы с протоколами HTTP и FTP. В данном примере я покажу как используя данную библиотеку получить исходный HTML код страницы.

    Для работы с API нам понадобиться добавить в раздел USES модуль Winapi.WinInet (или просто WinInet для более поздних версий Delphi).

    Для начала опишу функции WinInet, которые понадобятся мне в данном примере:

    InternetOpen

    Это первая функция WinINet, которая должна вызываться в приложении. Она говорит DLL инициализировать внутренние структуры данных и подготовиться к будущим вызовам приложения. В случае неудачи вернет NIL. Информацию об ошибке можно получить с помощь функции GetLastError.

    lpszAgent — Указатель на строку содержащую имя приложения, которое используется как user agent в HTTP протоколе.
    dwAccessType — Указывает какой тип доступа использовать из списка значений:

    INTERNET_OPEN_TYPE_DIRECT Прямое подключение.
    INTERNET_OPEN_TYPE_PRECONFIG Получить настройки подключения из реестра.
    INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY Получает настройки из реестра и предотвращает использование Microsoft JScript или Internet Setup (INS) файла.
    INTERNET_OPEN_TYPE_PROXY Доступ через прокси сервер.

    lpszProxy — Указатель на строку содержащую адрес прокси сервера, если dwAccessType указан INTERNET_OPEN_TYPE_PROXY.
    lpszProxyBypass — Указатель на строку, которая содержит адреса, которые не нужно передавать через прокси.
    dwFlags — Флаг дополнительных опций, который может принимать значение:

    INTERNET_FLAG_ASYNC Выполнять только асинхронные запросы.
    INTERNET_FLAG_FROM_CACHE Все запросы возвращаются только из кэша. Если запрашиваемого элемента нет в кэше, то возвращается ошибка ERROR_FILE_NOT_FOUND.
    INTERNET_FLAG_OFFLINE Аналогично INTERNET_FLAG_FROM_CACHE запросы возвращаются из кэша.

    InternetConnect

    Функция открывает сессию работы с FTP или HTTP протоколом для указанного сайта. При неудаче возвращает NIL.

    hInet — Указатель созданный функцией InternetOpen.
    lpszServerName — Указатель на строку содержащую имя сервера, например asd-soft.ru или IP адрес.
    nServerPort — Порт сервера. Можно использовать константы:

    INTERNET_DEFAULT_FTP_PORT Порт FTP по умолчанию (21).
    INTERNET_DEFAULT_HTTP_PORT Порт HTTP по умолчанию (80).
    INTERNET_DEFAULT_HTTPS_PORT Порт HTTPS по умолчанию (443).
    INTERNET_DEFAULT_SOCKS_PORT Порт SOCKS по умолчанию (1080).
    INTERNET_INVALID_PORT_NUMBER Использовать стандартный порт для службы, указанной в dwService.

    lpszUsername — Указатель на строку, которая определяет имя пользователя. Если параметр NIL, то функция использует значение по умолчанию. Для FTP протокола это «anonymous».
    lpszPassword — Указатель на строку, которая определяет пароль пользователя.
    dwService — Определяет тип сервиса:

    INTERNET_SERVICE_FTP FTP протокол.
    INTERNET_SERVICE_GOPHER Gopher.
    INTERNET_SERVICE_HTTP HTTP протокол.

    dwFlags — Опции, специфичные для выбранного сервиса в dwService.
    dwContext — Указатель на функцию, которая будет обрабатывать возвращаемые события. Например, при асинхронной работе.

    HttpOpenRequest

    Подготовка HTTP запроса.

    hConnect — Указатель на HTTP сессию, созданную функцией InternetConnect.
    lpszVerb — Указатель на строку с типом запроса GET или POST. Если указать NIL, то будет использоваться GET запрос.
    lpszObjectName — Указатель на строку, которая содержит объект запроса. Это может быть HTML страница, скрипт или файл.
    lpszVersion — Указатель на строку с версией протокола. Если передать NIL, то функция использует HTTP версии 1.1 или 1.0 в зависимости от настроек Internet Explorer.
    lpszReferrer — Указатель на строку с адресом предыдущей страницы.
    lplpszAcceptTypes — Указатель на строку с типом содержимого. Какие именно значения могут быть переданы описаны в этом документе.
    dwFlags — Набор флагов из списка:

    INTERNET_FLAG_CACHE_IF_NET_FAIL Возвращать данные из кэша, если сеть не доступна.
    INTERNET_FLAG_HYPERLINK Перезагружает данные из сети, если нет Expires time или LastModified time.
    INTERNET_FLAG_IGNORE_CERT_CN_INVALID Отключает проверку SSL/PCT сертификатов, которые возвращает сервер.
    INTERNET_FLAG_IGNORE_CERT_DATE_INVALID Отключает проверку SSL/PCT сертификатов на достоверные даты.
    INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP При использовании этого флага WinInet позволяет делать переадресацию с HTTPS на HTTP адреса.
    INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS При использовании этого флага WinInet позволяет делать переадресацию с HTTP на HTTPS адреса.
    INTERNET_FLAG_KEEP_CONNECTION Поддерживать соединение с сервером.
    INTERNET_FLAG_NEED_FILE Указывается в случае, если временный файл должен быть создан при отсутствии в кэше.
    INTERNET_FLAG_NO_AUTH Не использовать автоматическую аутентификацию.
    INTERNET_FLAG_NO_AUTO_REDIRECT Не использовать автоматическую переадресацию.
    INTERNET_FLAG_NO_CACHE_WRITE Не добавляет данные в кэш.
    INTERNET_FLAG_NO_COOKIES Отключает использование кукисов.
    INTERNET_FLAG_NO_UI Отключает диалоговое окно cookie.
    INTERNET_FLAG_PRAGMA_NOCACHE Получать данные с исходного сервера, даже при наличии их в кэше прокси сервера.
    INTERNET_FLAG_RELOAD Запрашивает загрузку данных с сервера, а не из кэша.
    INTERNET_FLAG_RESYNCHRONIZE Перезагрузить HTTP ресурсы, если они были изменены с момента последней загрузки.
    INTERNET_FLAG_SECURE Использовать безопасные SSL/PCT транзакции. Имеет смысл только для HTTP запросов.

    dwContext — Ссылка на ресурсы связанные с этим запросом.

    HttpSendRequest

    Отправляет HTTP запрос. Возвращает True в случае удачного выполнения запроса.

    hRequest — Указатель на запрос подготовленный функцией HttpOpenRequest.
    lpszHeaders — Указатель на строку с дополнительными заголовками запроса.
    dwHeadersLength — Длинна дополнительных заголовков.
    lpOptional — Указатель на буфер, содержащий дополнительные данные. Этот параметр обычно используется при POST и PUT запросах.
    dwOptionalLength — Размер передаваемого буфера.

    HttpQueryInfo

    Запросить информацию связанную с HTTP запросом.

    hRequest — Указатель на запрос подготовленный функцией HttpOpenRequest.
    dwInfoLevel — Набор флагов, определяющих тип возвращаемой информации. Со списком возможных флагов можно ознакомиться на данной странице. В нашем примере нам понадобится всего два:

    HTTP_QUERY_FLAG_NUMBER Указывает на то, что нужно возвращать число в качестве статуса.
    HTTP_QUERY_STATUS_CODE Нужно возвращать стату. Список возможных статусов перечислен на этой странице.

    lpvBuffer — Указатель на буфер для возвращаемой информации. Этот параметр не может быть NIL.
    lpdwBufferLength — Указатель на переменную, в которую будет записан размер возвращаемого буфера.
    lpdwReserved — Указатель на переменную в которой содержится индекс заголовка возвращаемой информации.

    InternetQueryDataAvailable

    Запрашивает кол-во данных полученных в результате запроса.

    hFile — Указатель на запрос подготовленный функцией HttpOpenRequest.
    lpdwNumberOfBytesAvailable — Указатель на переменную в которую будет передано кол-во доступных байт.
    dwFlags — Параметр не используется и должен быть равным 0.
    dwContext — Параметр не используется и должен быть равным 0.

    InternetReadFile

    Читает данные полученные запросом.

    hFile — Указатель на запрос подготовленный функцией HttpOpenRequest.
    lpBuffer — Указатель на буфер для чтения данных.
    dwNumberOfBytesToRead — Кол-во байт для чтения.
    lpdwNumberOfBytesRead — Кол-во прочитанных байт.

    InternetCloseHandle

    Освобождает указатель созданный функциями InternetOpen, InternetConnect или HttpOpenRequest.

    hInet — Указатель.

    И последняя функция, которая не относится к API WinInet, но которая нам понадобиться: GetLastError — Возвращает код последней ошибки.

    Теперь напишем код, который получит HTML код страницы с адресом http://asd-soft.ru/delphi-wininet-begin-http

    Результатом выполнения данного кода будет HTML код страницы в переменной ResponseString.

    Функция SysErrorMessage — возвращает текст ошибки по коду из GetLastError.

    Программирование на основе Win32 API в Delphi

    Оглавление

    1. Введение

    Любую современную программу или программную технологию можно представить как совокупность программных "слоев". Каждый из этих слоев производит свою собственную работу, которая заключается в повышении уровня абстракции производимых операций. Так, самый низший слой (слои) вводит понятия, которые позволяют абстрагироваться от используемого оборудования; следующий слой (слои) позволяет программисту абстрагироваться от сложной последовательности вызовов функций, вводя такое понятие как протокол и т.д. Практически в любом современном программном продукте можно обнаружить и выделить около десятка последовательных слоев абстракции.

    Абстракция от оборудования и низкоуровневых протоколов вводится в ядра операционных систем в виде библиотек API (Application Program Interface). Однако современные тенденции приводят к необходимости абстрагирования и от самих операционных систем, что позволяет переносить программы с одной операционной системы на другую путем простой перекомпиляции (транслируемые программы, в основном, вообще не требуют никаких действий по переносу).

    Абстракцию, которая доступна программисту в виде библиотек API можно назвать базовой. Это самый низкий уровень абстракции, который доступен для прикладного программирования. На уровне ядра системы доступны и более низкие уровни абстракции, однако для их использования необходимо разрабатывать специализированные программы (драйвера, модули). Базовый уровень абстракции (API) предоставляет максимально широкие возможности для прикладного программирования и является наиболее гибким. Однако, программирование с использованием API является гораздо более трудоемким и приводит к значительно большим объемам исходного кода программы, чем программирование с использованием дополнительных библиотек.

    Дополнительные библиотеки поставляются со многими средствами разработки с целью уменьшения трудоемкости и сроков разработки программ, что в итоге приводит к повышению их конкурентноспособности. Но применение дополнительных библиотек абстракций приводит к резкому увеличению размеров откомпилированных программ, из-за того что в программу включается код используемых библиотек, к тому же это включение зачастую бывает неэффективным - в программу включаются неиспользуемые участки кода. Кроме того, чем больше уровень абстракции библиотеки, тем сложнее ее код, и тем больше трудностей возникает при решении сложных задач. Приходится учитывать множество взаимосвязей и взаимных влияний отдельных элементов и процессов библиотеки друг на друга. Кроме того, структура и функциональность любой библиотеки обычно рассчитывается на удовлетворение всех потенциально возникающих задач, что приводит к ее громоздкости и неэффективности.

    В Delphi используется очень мощная и сложная библиотека VCL (Visual Components Library), которая помимо непосредственных абстракций вводит также и множество своих функциональных классов. В этой библиотеке находятся компоненты для визуального отображения информации, работы с базами данных, с системными объектами, компоненты для работы с Internet-протоколами, классы для написания своих COM-объектов и многое другое. Модули библиотеки подключаются к компиляции по мере необходимости, однако базовый размер простейшего диалогового проекта с одной формой превышает 300кБ (со статически скомпонованной библиотекой). И такой размер во многих случаях может оказаться слишком большим, особенно если программа не требует большой функциональности в интерфейсе.

    Для решения этой проблемы можно отказаться от использования библиотеки VCL, и программировать, используя базовый набор функций Win32 API. Однако, если при разработке линейных, недиалоговых, нерезидентных программ не возникает никаких трудностей, то разработка программ, требующих активного взаимодействия с пользователем или системой, становится трудоемкой. Структурное программирование, рекомендуемое в таких случаях, оказывается неэффективным и трудоемким.

    Данная статья посвящена проблеме создания и использования компактной объектно-ориентированной библиотеки, которая бы облегчила построение небольших и эффективных программ на основе Win32 API.

    2. Существующие решения

    Автору известны три объектно-ориентированные библиотеки, которые можно рассматривать как альтернативу библиотеке VCL при написании компактных программ. Это библиотеки классов XCL, ACL и KOL. Все библиотеки бесплатны и поставляются в исходных кодах.

    Библиотека ACL (API control library)
    Автор: Александр Боковиков, Екатеринбург, Россия
    Страничка: http://a-press.ur.ru/pc/bokovikov
    E-Mail: abb@adx.ru
    Классы и модули: TFont, TFonts, TControl, TWinControl, TStdControl, TLabel, TEdit, TListBox, TButton, TCheckBox, TComboBox, TGroupBox, TProgressBar, TKeyboard
    Библиотека XCL (Extreme class library)
    Автор: Vladimir Kladov (Mr.Bonanzas)
    Страничка: http://xcl.cjb.net
    E-Mail: bonanzas@xcl.cjb.net
    Классы и модули: XForm, XApplet, XCanvas, XPen, XBrush, XFont, ZDDB, ZHiBmp, ZDIBitmap, ZBitmap, ZIcon, ZGifDecoder, ZGif, ZJpeg, XLabel, XButton, XBevel, XPanel, XSplitPanel, XStatus, XGrep, XGroup, XCheckBox, XRadioBox, XPaint, XScroller, XScrollBox, XScrollBoxEx, XEdit, XNumEdit, XCombo, XGrid, XListView, XMultiList, XNotebook, XTabs, XTabbedNotebook, XCalendar, XGauge, XGaugePercents, XHysto, XHystoEx, XImageList, XImgButton, XTooltip, XCustomForm, XDsgnForm, XDsgnNonvisual, CLabel, CPaint, CButton, CEdit, CMemo, CCheckBox, CRadioBox, CListBox, CComboBox, ZList, ZMenu, ZPopup, ZMainMenu, ZPopupMenu, ZTimer, ZStrings, ZStringList, ZIniFile, ZThread, ZQueue, ZFileChange, ZDirChange, ZOpenSaveDialog, ZOpenDirDialog, ZTree, ZDirList, ZDirListEx, ZRegistry, ZStream, ZFileStream, ZMemoryStream, XStrUtils, XDateUtils, XFileUtils, XWindowUtils, XPrintUtils, XShellLinks, XJustOne, XJustOneNotify, XPascalUnit, XSysIcons, XCanvasObjectsManager, XRotateFonts, XFocusPainter, XFormsStdMouseEvents, XFormsStdKeyEvents, XFormAutoSizer, XAligner, XControlAutoPlacer, XMfcAntiFlicker, XSplitSizer, XResizeAntiFlicker, XCaretShower, XEditMouseSelect, XEditClipboard, XEditUndo, XListMouseSel, XListKeySel, XListEdit, ZNamedTags, XBtnRepeats, XBufLabels, XBackgrounds, XWndDynHandlers
    Библиотека KOL (Key object library)
    Автор: Vladimir Kladov (Mr.Bonanzas)
    Страничка: http://xcl.cjb.net
    E-Mail: bonanzas@xcl.cjb.net
    Классы и модули: TObj, TList, TGraphicTool, TCanvas, TControl, TTimer, TTrayIcon, TStream, TStrList, TDirList, TIniFile

    Как видно из списка приведенных для каждой библиотеки классов, эти библиотеки предендуют скорее не на помощь при написании программ с использованием Win32 API, а пытаются создать более высокий уровень абстракции чем API, по крайней мере в графической части (особенно это относится к XCL). Более того, иерархия и перечень объектов совпадают с соответствующими структурами в библиотеке VCL, что скорее всего связано с желанием авторов обеспечить логическую совместимость с VCL при построении программ на основе этих библиотек.

    Данные библиотеки не обеспечивают минимального размера программы, за счет того что предоставляют более высокий уровень абстракции. Они являются компромисом между программированием с использованием VCL и программированием на чистом API.

    3. Принципы построения API-библиотеки

    тандартным видом API-программирования является структурное программирование. Примеры такого программирования на Win32 API есть практически в любой книжке по Borland Pascal, Borland C++, Microsoft Visual C++ и другим системам разработки. Множество примеров API-программирования на С содержится в поставке Microsoft Visual C++.

    Структурное программирование с оконными функциями, процедурами обработки команд, не в состоянии обеспечить быструю и эффективную разработку программ. В современной ситуации большинство программистов привыкло к объектно-ориентированному методу, с возможностью инкапсуляции, наследования и переопределения методов объектов. Такое программирование оказывается наиболее эффективным.

    Кроме того, для построения эффективной API-библиотеки прежде всего нужно выяснить, какие задачи при работе с Win32 API являются наиболее трудоемкими. Практика показывает, что наиболее неудобным и трудоемким элементом является реализация основного диспетчера логики программы - оконной функции. Реализация этой функции в качестве метода класса, а не простой глобальной функции, позволила бы улучшить структуру кода и облегчить программирование путем инкапсулирования всех переменных внутри оконного класса.

    Программирование может быть еще более облегчено, есть возпользоваться механизмом message-процедур языка Object Pascal. Вызов этих процедур полностью лежит на компиляторе и корневом объекте TObject и включает в себя методы Dispatch, DefaultHandler, а также все методы, объявленные с директивой message. Такое решениее позволит полностью отказаться от громоздкого оператора case в оконной функции.

    Учитывая все вышеперечисленное автором была создана компактная библиотека оконных классов WinLite. Эта библиотека является минимальной, она не вводит более высоких уровней абстракции чем существуют в Win32 API - она только облегчает работу, переводом программирования в объектно-ориентированное русло. Размер библиотеки очень небольшой и вся она помещается в один модуль. Библиотека реализует базовый класс TLiteFrame и построенные на основе него оконные классы:

    • TLiteWindow - класс окна, с возможностью subclass'инга;
    • TLiteDialog - класс немодального диалога;
    • TLiteDialogBox - класс модального диалога.

    Библиотека может быть использована совместно с VCL. На первый взгляд, это возможность является абсурдной и ненужной, так как об экономии размера в этом случае не может быть и речи. Однако, иногда бывают моменты, когда реализация специфических оконных элементов на основе объектов TWinControl или TCustomControl может быть затруднена или неэффективна из-за их сложности и неочевидного поведения. В этом случае, можно реализовать такой элемент на базе класса TLiteWindow - он будет вести себя стандартным образом, как и полагается вести себя стандартному оконному элементу Win32.

    Благодаря своей простой архитектуре библиотека может быть использована в многопоточной программе. Конечно, вы не сможете вызывать методы классов одного потока из другого потока без соответствующей синхронизации. Однако, вы можете беспрепятственно создавать оконные классы в различных потоках без блокировки и синхронизации, а также посылать сообщения оконным классам в другом потоке.

    Практический совет: при API-программировании программист должен сам следить за корректным освобождением многочисленных ресурсов, которые занимает программа во время выполнения. Поэтому, для облегчения этой задачи используйте какую-либо контролирующую утилиту, например MemProof или Numega BoundsChecker. Корректное освобождение занятых ресурсов крайне необходимо !

    Для редактирования шаблонов диалогов можно использовать любой редактор ресурсов, например Borland Resource WorkShop, правда он несколько неудобен, а окончательный результат все равно приходится корректировать вручную.

    Вся документация необходимая для API-программирования содержится в поставляемых компанией Microsoft компакт-дисках с документацией под общим названием MSDN (Microsoft Developer's Network). Существует online-версия документации по адресу http://msdn.microsoft.com. Урезанная версия MSDN, содержащая основные файлы помощи, поставляется с Delphi.

    Прежде чем вы решите работать над своим проектом в русле Win32 API, подумайте, а зачем вам это нужно? В подавляющем числе случаев размер программы не имеет никакого значения. Я не хочу сказать, что API-программирование сложнее чем VCL-программирование. Во многих случаях легче изучить и написать 10 вызовов API с кучей аргументов и понимать, что происходит, чем написать 1 вызов простой, на первый взгляд, VCL-инструкции и потом долго исследовать дебри VCL в поисках ответа. Просто API-программирование - это другая культура, к которой вы, возможно, не привыкли. И первоначальная работа может вызвать у вас сильное разочарование. API-программирование требует дотошности, кропотливости и внимательного изучения документации.

    Те же, кто отважился программировать на API, наряду с библиотекой WinLite могут совместно использовать невизуальные классы как из состава VCL (модули SysUtils, Classes), так и многие сторонние - естественно, что размер вашей программы при этом увеличится.

    Илон Маск рекомендует:  10 самых лучших пользовательских функций javascript за все времена
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL