Шрифт
ВК NativeAPI на Lazarus/FreePascal - теперь и для 1С 8.3 на Linux!
Play

ВК NativeAPI на Lazarus/FreePascal - теперь и для 1С 8.3 на Linux!

Данная разработка основывается на публикации ВК NativeAPI на Delphi и FreePascal автора v77 (за которую ему огромный плюс).

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

  1. Windows_x86 (1С 8.2-8.3 клиент+сервер);
  2. Windows_x86_64 (1С 8.2-8.3 сервер);
  3. Linux_x86 (1С 8.2 сервер, 1С 8.3 клиент+сервер);
  4. Linux_x86_64 (1С 8.2 сервер, 1С 8.3 клиент+сервер).

Также исправлены некоторые неточности и ошибки, и добавлено несколько функций по чтению/записи значений из V8Variant.

В прилагаемом архиве содержится демонстрационный пример компоненты с исходниками для Lazarus, а также тестовая обработка для 1С.

Скачать файлы Специальные предложения

Но с PWideChar не прокатило.

А вот здесь немного поправил, т.к. под виндой все работает норм, а если под линухом вызвать V8SetWString(RetValue,''); то получаем Access Violation

  • Скопировать ссылку
  • Перейти

Не сразу прочитал твой комент и убил на это же целый день :-(

Компилилилось оно нормально под виндой, но при попытке считать строковое свойство, которое равно "" - 1С вылетала

Реализовал немного по другому:

Т.е. добавлено (при выделении памяти там уже #0 в первом байте):

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Пробовал на win 7 32бит и 64бит. Может кто-нибудь помочь? подсказать в чем ошибка?

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Под виндой действительно все отлично! Но под линуксом x64 (конкретно UBUNTU 12.04 LTS x64) есть проблемы: 1. Компилировать надо с ключем -Cg (или -fPIC) И компилируется тогда нормально.

2. Но не работает:( Компонента в 1С грузится, методы вызываются, но параметры не передаются. Все числовые видны в компоненте как VTYPE_EMPTY. Все что ни передашь обратно в 1С - Неопределено. Передача строковых параметров приводит к краху 1С.

Очевидно, есть беда с разрядностью.

  • Скопировать ссылку
  • Перейти

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

Вот, если бы под линуксом x64 заработал бы, цены бы не было.

  • Скопировать ссылку
  • Перейти

(10) kirlog, конкретно проверял под следующими платформами: win x32 win x64 linux x32

под ними всё работает.

под linux x64 не проверял.

а какой версией лазарус компилируете?

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

so - это для linux, dll - для windows

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(19) AlexO, Утечки были в компоненте под linux x64, да и намешано там было достаточно много сторонних компонент. Все это компилировалось в FreePascal (Code Typhon) и в итоге не всегда, но время от времени что нибудь вылетало и тянуло с собой процесс сервера 1С. Компонента о которой я говорю имеет один метод Выполнить(Команда) и возвращала результат выполнения строкой. Если внутри дочернего процесса что то ломалось, то теперь уже не вылетала 1С, я просто получал некое сообщение о ошибке в качестве результата.

Да и в довесок. Если на питоне сделать СОМ и передать в качестве параметра ссылку на экземпляр класса 1С++ (в 7-ке) или ссылку на обработку/отчет/форму (в 8-ке) то внутри питона можно вызывать методы этого класса, У меня таким образом реализован JSON адаптер который асинхронно оповещает о завершении задачи в celery. Здорово тем что можно вызвать действие, при этом интерфейс 1С остается рабочим, а в COM объекте питона запускается поток с ожиданием, по завершению которого отработает нужный метод. Под линуксом конечно такое не пройдет, все подумываю как бы задействовать HTML контрол для интеграции.. можно же по идее использовать локальный сервер вместо компоненты и jquery.

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Не работает. Выдаёт ошибки. К примеру

[Error] v8napi_64.pas(505): Operator not applicable to this operand type [Error] v8napi_64.pas(505): Pointer type required

Move(ZeroChar, (pMemory^ + CountByte - SizeOf(WideChar))^, SizeOf(WideChar));

Как решить проблему?

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(27) выдалось немного свободного времени, проверил на ubuntu x64 - собирается нормально с FPC 3.0. на других версиях не пробовал, но, по крайней мере, на ubuntu x32 с FPC 2.6 проект собирался и отрабатывал нормально.

по поводу проблемы при работе с параметрами на linux x64 - да, действительно, не передаются. проблема, скорее всего, из-за выравнивания данных - нужно немого "раздвинуть" V8Variant сейчас тестирую, чуть позже выложу подправленную версию интерфейсного модуля

📎📎📎📎📎📎📎📎📎📎