ВК NativeAPI на Lazarus/FreePascal - теперь и для 1С 8.3 на Linux!
Данная разработка основывается на публикации ВК NativeAPI на Delphi и FreePascal автора v77 (за которую ему огромный плюс).
Главное отличие от оригинала - интерфейсный модуль переработан, и теперь позволяет компилировать компоненты для Linux. Более того, он сделан кросс-платформенным, и теперь с помощью данной версии можно собирать компоненты для всех поддерживаемых 1С на текущий момент платформ:
- Windows_x86 (1С 8.2-8.3 клиент+сервер);
- Windows_x86_64 (1С 8.2-8.3 сервер);
- Linux_x86 (1С 8.2 сервер, 1С 8.3 клиент+сервер);
- 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 сейчас тестирую, чуть позже выложу подправленную версию интерфейсного модуля