Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

v8napi.lazarus.objmod

1C Object model Native API for lazarus

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

fpnativeapi

1C Native API Extension using FreePascal/Lazarus.

Description in Russian

Пример Native API расширения для 1С на FreePascal/Lazarus.

Проект для Lazarus IDE (версии >= 1.4.4).

Реализовано три примера:

  1. Полный аналог стандартного примера от 1С для C++. Описание методов и свойств расширения осуществляется вручную. (класс TAddInExample в example.pas, регистрация класса в AddInNative.lpr).
  2. Реализация стандартного примера от 1С для C++ с использованием более удобного способа описания методов и свойств при регистрации класса (класс TAddInEasyExample в easyexample.pas, регистрация класса в AddInNative.lpr).
  3. Попытка добавления возможности использования GUI в расширениях (класс TFormController в guiexample.pas, регистрация класса в AddInNative.lpr). Поскольку LCL написан из расчета работы в основном потоке приложения, пришлось пойти на ряд уступок и упрощений. Как минимум, на данный момент я сходу не нашел возможности усыпить основной цикл обработки сообщений в GUI-потоке при отсутствии необходимости его работы, поэтому просто добавил Sleep :) Из-за этого GUI-поток постоянно использует 15% процессора. Пока нет времени ковырять эту возможность, т.к. мне нужен был только Proof Of Concept самой возможности использования GUI.

Реализовано прозрачное преобразование типов 1С в тип Variant FreePascal.

Для разработки своего расширения необходимо реализовать наследника класса TAddIn из v8addin.pas, и зарегистрировать его в основной секции проекта в файле AddInNative.lpr. Файлы easyexample.pas, example.pas, exampleform.lfm, exampleform.pas и guiexample.pas содержат примеры использования и могут быть удалены при разработке своего расширения. Подключение к 1С скомпилированной библиотеки осуществляется стандартным способом.

Список файлов (части v8addin.pas для удобства вынесены в отдельные включаемые файлы *.inc):

Файл Описание
AddInNative.lpi Настройки проекта
AddInNative.lpr Основной файл проекта. Тут необходимо зарегистрировать реализованные классы расширений
addindefbase.inc Реализация AddInDefBase.h
binarydata.inc Работа с двоичными данными (изображениями) 1С
bindings.inc Трансляция вызовов методов C++ классов в вызовы методов классов FreePascal
componentbase.inc Реализация ComponentBase.h
easyexample.pas Пример расширения с упрощенной регистрацией методов и свойств класса
example.pas Пример расширения с ручной регистрацией методов и свойств класса (как в примере на C++)
exampleform.lfm Данные формы для примера использования GUI
exampleform.pas Модуль формы для примера использования GUI
factory.inc Фабрика классов (эмуляция классов и объектов C++, трансляция вызовов, создание/уничтожение объектов и т.п.)
guiexample.pas Пример расширения с использованием GUI
imemorymanager.inc Реализация IMemoryManager.h
init.inc Инициализация и очистка памяти для эмуляции классов C++
strings.inc Работа со строками
types.inc Реализация types.h
v8addin.pas Базовый класс для реализации расширения (TAddIn)
v8addingui.pas Реализация отдельного потока для работы с GUI
variants.inc Преобразование типов 1С в тип Variant FreePascal
NativeAPI.epf Пример внешней обработки для использования компоненты