Применение функции CoCreate в Fore.NET

При разработке приложений в языке 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(255255255);
    
//...

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(
255255255);
    
//...

При работе в 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 веб-сервиса.

См. также:

База знаний разработчиков