При разработке приложений в языке Fore для инициализации новых объектов используется ключевое слово New, после которого указывается класс и вызывается конструктор класса. При работе с Fore.NET-аналогами классов Fore также используется ключевое слово New и конструктор, при этом конструктор по умолчанию (Create) можно не указывать. Если в Fore у конструктора имеются параметры, то в Fore.NET конструктор вызывается как метод.
Пример инициализации объектов в Fore и Fore.NET:
Var
//...
ManagerFactory: IMetabaseManagerFactory;
Color: IGxColor;
//...
Begin
//...
ManagerFactory := New MetabaseManagerFactory.Create;
Color := New GxColor.CreateRGB(255, 255, 255);
//...
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Metabase;
//...
Var
//...
ManagerFactory: IMetabaseManagerFactory;
Color: GxColor;
//...
Begin
//...
ManagerFactory := New MetabaseManagerFactory();
ManagerFactory := New MetabaseManagerFactory.Create();
Color := New GxColorClass_2();
Color.CreateRGB(255, 255, 255);
//...
При работе в Fore.NET данный способ инициализации объектов доступен, если используется версия «Форсайт. Аналитическая платформа», установленная с помощью инсталлятора, не использующего технологию Reg-free COM registration.
Если инсталлятор использует технологии Reg-free COM registration, то при выполнении Fore.NET-кода, в котором осуществляется инициализация COM-объектов платформы, может возникнуть ошибка об отсутствии зарегистрированного COM-класса. Ошибка возникает в связи с тем, что среда .NET не может создать экземпляр класса из-за отсутствия манифеста с описанием COM-классов в исполняемых файлах. Для исправления ошибки необходимо изменить код Fore.NET: для инициализации COM-объектов используйте функцию Prognoz.Platform.PiLibNet.Utils.ComCreator.Instance.CoCreate<Type>() вместо оператора New. Для использования функции подключите системную сборку WinForms.Utils:
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.PiLibNet.Utils;
//...
Var
//...
ManagerFactory: IMetabaseManagerFactory;
Driver: DalOrcl8Driver;
//...
Begin
//...
ManagerFactory := ComCreator.Instance.CoCreate<MetabaseManagerFactoryClass>();
Driver := ComCreator.Instance.CoCreate<DalOrcl8DriverClass>();
//...
Использование функции CoCreate обязательно в коде, который в дальнейшем предназначен для вызова с помощью операции ForeExec веб-сервиса.
См. также: