Fore, Fore.NET, .NET и как все это связано между собой
Согласно исследованиям TIOBE, язык C# занимает почетное 5-е место в рейтинге языков программирования. Для того чтобы снизить порог вхождения для разработки под Prognoz Platform, позволить разработчикам .NET использовать собственные наработки и обширную библиотеку классов .NET Framework Class Library и, наоборот, позволить использовать решения Prognoz Platform в рамках .NET проектов, было решено разработать язык программирования Fore.NET.
В данной статье я хочу сфокусировать ваше внимание на некоторых особенностях .NET, Fore.NET и двусторонней интеграции с Fore.
Что это — Fore.NET?
Подробное определение .NET Framework можно найти в Википедии, мы не будем на этом подробно останавливаться, однако отметим следующие наиважнейшие моменты, также доступные в Fore.NET:
1. В .NET Framework есть обширная библиотека классов Framework Class Library (FCL), которую также можно использовать в Fore.NET.
2. Программы, написанные на .NET Framework, совместимы друг с другом, т.к. оттранслированы в Common Intermediate Language и выполняются в одной и той же исполняющей среде, таким образом, как к программам, написанным на Fore.NET, можно подключать любые другие библиотеки, написанные на .NET, так и наоборот.
Исходя из предпосылок создания и опираясь на особенности .NET Framework, в Prognoz Platform был разработан язык программирования Fore.NET, в его состав входит транслятор программного кода в байт-коды MSIL, среда разработки со встроенным дизайнером форм, разработаны различные инструменты интеграции с инструментами Prognoz Platform.
Архитектура сборок Fore.NET крайне схожа с архитектурой сборок языка Fore. Fore.NET сборка может в себя включать Fore.NET модули и формы. Стоит обратить внимание, что синтаксис Fore.NET максимально схож с синтаксисом языка Fore.
Как уже было сказано выше, Fore.NET транслирует код в байт-коды, выполняемые в среде CLR. Результатом такой трансформации является сборка, уже выполняемая средой CLR.
Использование системных сборок Fore в Fore.NET
Новый язык программирования, позволяющий использовать свежие IT-решения, безусловно, крутая штука, однако его целесообразность сильно теряется при невозможности интегрирования с остальными решениями Prognoz Platform. Начиная с этого момента мы перейдем непосредственно к различным интеграционным решениям и практическим выкладкам.
Ядро Prognoz Platform состоит из COM библиотек, а системные сборки строятся на основании библиотек типов. Fore.NET, в свою очередь, базируется на .NET и для корректной работы с объектами ядра используется технология COM Interop: системные сборки Fore.NET представляют собой сборки общеязыковой среды выполнения (CLR) после выполнения экспорта из библиотек типов системных сборок посредством tlbimp.exe, подробнее о процессе получения сборок CLR можно почитать на MSDN. Системные сборки Fore.NET имеют вид Prognoz.Platform.Interop.SourceDllName.dll.
Также важно отметить, что т.к. Fore.NET выполняется в CLR, он полностью поддерживает как подключение всех библиотек FCL, так и любых написанных под .NET библиотек.
Для подключения сборок из GAC можно использовать вкладку «.NET сборки». При отсутствии сборки в GAC и необходимости использования этой сборки в рамках Prognoz Platform, такую внешнюю сборку можно загрузить непосредственно в метабазу. Для этого необходимо использовать опцию «Загрузить внешнюю сборку»:
Fore <-> Fore.NET
Теперь прейдем непосредственно к самому главному в этой статье – интеграции Fore с Fore.NET и наоборот.
Чтобы не терять функционал, написанный ранее, Fore.NET имеет возможность вызова Fore методов. Далее будут рассмотрены примеры динамического вызова функций Fore.NET из Fore и наоборот, это поможет сохранить наработки на Fore, продолжая разработку на Fore.NET, или же из Fore вызывать методы из .NET библиотек, например, из Framework Class Library, посредством Fore.NET.Рассмотрим первую часть примера. Создадим Fore-форму в рамках Fore-сборки и Fore.NET-форму в рамках Fore.NET-сборки. У полученной Fore-сборки идентификатор «FORE_ASSEMBLY», а у Fore.NET-сборки – «FORE_NET_ASSEMBLY», это нам пригодится для дальнейших манипуляций.
В Fore-форму добавим программный код, включающий в себя описание класса, который мы будем вызывать в дальнейшем динамически, а также динамический вызов Fore.NET (ниже будет рассказано более подробно):
Для того чтобы наша Fore-форма в дальнейшем корректно заработала, не забудем к ней подключить сборки «Metabase», «Ui» и «ForeNET».
Визуально форма выглядит следующим образом:
Таким образом, подготовительные действия с Fore завершены.
Подготовим теперь сборку Fore.NET, добавим следующий программный код, содержащий точку входа в Fore.NET-программу, в которой будет создаваться Fore.NET-форма с идентификатором «FORE_NET_FORM» с учетом метабазы:
Теперь добавим следующий программный код в Fore.NET-форму, включающий в себя описание класса, который мы будем вызывать в дальнейшем динамически, а также динамический вызов Fore (ниже будет рассказано более подробно):
Теперь для того чтобы Fore.NET-форма корректно открывалась, укажем точку входа Fore.NET-сборки — Program:
Fore -> Fore.NET
В следующей части программного кода Fore.NET-формы в классе ForeNetSource имеется метод, возвращающий строку и показывающий стандартный MessageBox сборки Windows.Forms, именно этот метод мы и будем вызывать из Fore:
Давайте просмотрим, как все это работает:
Fore.NET -> Fore
Теперь рассмотрим вызов Fore из Fore.NET. Рассмотрим часть программного кода Fore-формы, в которой в классе ForeSource имеется метод, возвращающий строку и показывающий InformatonBox системной сборки Prognoz Platform «Ui», именно этот метод мы и будем вызывать из Fore.NET:
Убедимся, что вызов метода работает:
Стоит обратить внимание, что такая динамическая работа с объектами Fore и Fore.NET может происходить и в рамках одного языка – мы можем как создавать Fore-объекты и вызывать Fore-методы из Fore, так и тоже самое в Fore.NET из Fore.NET.
Заключение
Мы с вами посмотрели на предпосылки создания языка программирования Prognoz Platform Fore.NET, посмотрели некоторые технические особенности .NET, убедились в доступности системных библиотек Fore в Fore.NET, а самое главное – убедились в двусторонней интеграции Fore и Fore.NET.