Данная разработка основывается на публикации ВК 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С.
Под виндой компилится х32 х64 отлично.
Под линуксом только под х32, по х64 валит ошибку, линкер ругается на
Пока что еще не нашел способа исправить.
Помогает
Но с PWideChar не прокатило.
А вот здесь немного поправил, т.к. под виндой все работает норм, а если под линухом вызвать
V8SetWString(RetValue,»); то получаем Access Violation
Показать
quick,
Не сразу прочитал твой комент и убил на это же целый день 🙁
Компилилилось оно нормально под виндой, но при попытке считать строковое свойство, которое равно «» — 1С вылетала
Реализовал немного по другому:
Показать
Т.е. добавлено (при выделении памяти там уже #0 в первом байте):
удалено
Подскажите кто подключал торговое оборудование для linux клиента 1С 8.3, как это сделать?
Есть сканер штрихкода, считыватель карт с магнитной лентой и фискальник штрих-м-фр-к.
Под windows есть драйвер ScanOPOS, для Linux не могу найти аналог.
Для штрих-м-фр-к нашел исходники драйвера, как скомпилировать и завязать с 1С пока непонятно.
При компиляции минимального проекта, который указан вэтой публикации , на lazarus, вылетает ошибка на коде регистрации функции
Пробовал на win 7 32бит и 64бит.
Может кто-нибудь помочь? подсказать в чем ошибка?
(5) а интерфейсный модуль Вы используете оттуда, или из моей публикации?
(6) использовал и вашу и из той публикации
(6) можете подсказать что-нибудь по данной ошибке?
Под виндой действительно все отлично!
Но под линуксом 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 не проверял.
а какой версией лазарус компилируете?
Помогите пожалуйста! Не проходит «ПодключитьВнешнююКомпоненту». В чем может быть причина? Пробовал под разными клиентами, пересобрать, под правами админа… 8.3.5.1383, вин 8-64. Кстати, а почему используете файл SO, а не DLL?
(12) mvernig,
so — это для linux, dll — для windows
(12) mvernig,
не проходит именно с моей длл-кой, или сами собирали?
(0) в общем, эйфория прошла от 8.3, тема ВК тихо умерла?
(14) почему умерла?
(15) так нет ВК никаких. Посмотрите, что сделали ВК из 7.7: целый отдельный продукт 1С++.
А что сделали ВК в 8-ке? ))
Хотя, если вы придерживаетесь идеи, что «в восьмерке все есть и все отлично проработано, поэтому ничего дорабатывать не нужно» — тогда вы правы. Но.
Но тогда замкнутый круг — о какой нише доработок в 1С8 может идти речь, для которой в принципе понадобится писать ВК ? ))
После мучений с этими ВК пришел к тому, что лучше всего использовать связку SOAP — Внешняя программа. Одну компоненту вообще вынес во внешний бинарник и сделал компоненту которая только делает запуск этой проги без отображения терминала, и анализирует вывод в консоль, но для пользователя все это проходит скрытно. Так я с одной стороны прикрываю лазейки с утечками памяти в процессе 1с, которые приводят к краху процесса сервера, а с другой намного легче тестировать обычное консольное приложение нежели компоненту. Под виндой в большинстве случаев перешел на использование COM обьектов на Python. Это быстро, легко тестируется, не глючит.
(17) quick,
Да уж, очень логично ))
(17) quick,
А что делает сама компонента?
Утечки по какому поводу были?
Что за приложение?
(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#k8SjZc9Dxk + CountByte — SizeOf(WideChar))#k8SjZc9Dxk, SizeOf(WideChar));
Как решить проблему?
Не появилось ли решения тех проблем с архитектурой LINUX_64, что были изначально у данного проекта?
Там, напомню, все компилировалось, запускалось, но параметры никакие не передавались ни из 1С в компоненту, ни обратно.
Похоже проще начать использовать C++ чем возиться дальше с паскалем.