ВК NativeAPI на Delphi и FreePascal

16.12.15

Разработка - Разработка внешних компонент

1CNativeLib - бесплатная библиотека Delphi для создания внешних компонент (ВК) 1С по технологии Native API.
Новая версия.
16.12.2015 Исправлена ошибка: поиск свойств и методов ВК выполнялся с учетом регистра букв.
06.10.2015 Исправлена ошибка: сообщение "некорректная работа компоненты с памятью"

Скачать файлы

Наименование Файл Версия Размер
1CNativeLib.zip
.zip 44,87Kb
328
.zip 44,87Kb 328 Скачать
Вариант для FreePascal (Lazarus)
.zip 10,42Kb
128
.zip 10,42Kb 128 Скачать
v8napi.pas от 16.12.2015
.pas 39,71Kb
146
.pas 39,71Kb 146 Скачать

 

1CNativeLib - библиотека Delphi для создания внешних компонент (ВК) 1С по технологии Native API. Библиотека легка в использовании и позволяет заниматься непосредственно функционалом ВК, не отвлекаясь на соблюдение инструкций, предоставленных фирмой 1С.

 

Для того, чтобы создать ВК с помощью 1CNativeLib, достаточно создать проект DLL, написать класс с реализацией функционала вашей ВК и зарегистрировать этот класс при загрузке dll. Минимальный проект DLL с реализацией класса с одним методом выглядит так:

 

//-----------------------------------------------------------------

 

library MiniVK;

 

uses

SysUtils, v8napi;

 

type

TMyClass = class(TV8UserObject)

function Hello(RetValue: PV8Variant; Params: PV8ParamArray;

const ParamCount: integer): boolean;

end;

 

{ TMyClass }

 

function TMyClass.Hello(RetValue: PV8Variant; Params: PV8ParamArray;

const ParamCount: integer): boolean;

begin

V8SetWString(RetValue,'Привет из Delphi!'); //устанавливаем результат функции

result := True; //Устанавливаем флаг, что функция завершилась успешно

end;

 

begin

with ClassRegList.RegisterClass(TMyClass, 'MySuperExtention', 'TMyClass') do

begin

AddFunc('Hello', 'Привет', @TMyClass.Hello, 0); //регистрируем функцию

end;

end.

 

//-----------------------------------------------------------------

 

Всё необходимое содержится в одном модуле v8napi.pas. В прилагаемом архиве сам модуль, пример, более подробное описание и шаблон для нового проекта.

 

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52100    34    69    

43

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26244    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44976    117    64    

60

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35080    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

Разработка внешних компонент Платформа 1С v8.3 Платные (руб)

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    53999    35    14    

68

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30840    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

Разработка внешних компонент Платформа 1С v8.3 Бесплатно (free)

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    4039    starik-2005    28    

52

Внешние компоненты 1С и язык C++

Разработка внешних компонент Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    4778    starik-2005    32    

39
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
98. Magister 134 08.03.13 04:24 Сейчас в теме
Просто структура класса не такая получается. Компилятор другой - вот и всё, баста.
Думаю, правильным путем было бы создание "обертки" на C++, которая бы уже общалась с FreePascal. Иначе гиблое это дело, как мне кажется...
Сейчас вот добился вызова методов:
[quote]GetClassNames
GetClassObject
_Init
_setMemManager
_RegisterExtensionAs[/quote]
Вот откуда тут _RegisterExtensionAs? Ведь, судя по логике, должен быть _SetLocale.
Вывод - в том месте, где у нас находится _RegisterExtensionAs, должен находится _SetLocale.
Это, в принципе, объясняет и падение на RegisterExtensionAs - т.к. SetLocale по параметрам отличается.

upd. Да, так и есть. Подставил туда _SetLocale - получил параметром строку своей локали. Т.е. я всё правильно понял.
99. andrewks 1368 08.03.13 08:55 Сейчас в теме
(98) Magister, эмм... если я правильно понимаю, то достаточно найти правильный порядок адресов в TV8ProcRec, зачем обёртка?
105. Magister 134 11.03.13 14:58 Сейчас в теме
(99) В принципе можно и так. Просто "обертка" - это "идеологически" правильный путь :)

(100) не поможет, как и написал andrewks
Дело именно в структуре класса в памяти. GCC создает другую структуру, не совместимую с MSVC. И написанное мной выше подтверждает это.
100. v77 160 08.03.13 19:56 Сейчас в теме
(98) Magister, там дело в способе вызова функций. возьми первоначальный модуль и попробуй stdcall заменить на cdecl. вполне возможно, что заработает.
101. andrewks 1368 08.03.13 22:21 Сейчас в теме
(100) это я первым делом проверял - не помогло

меня больше другой вопрос заинтересовал - зачем понадобилось извращаться через пакед рекорды TV8ObjectRec, TV8ProcRec, и почему не работает через интерфейс/класс, как это сделано в родном примере на С++
103. andrewks 1368 10.03.13 11:01 Сейчас в теме
(100) Александр, поскольку линукса у Вас нет, и тема "поднятия" модуля на этой платформе Вам, видимо, не очень интересна, Вы не будете против, если я создам публикацию с форком модуля, посвящённым решению этой проблемы?
104. v77 160 10.03.13 15:55 Сейчас в теме
(103) andrewks, да ради бога. я только за.
106. andrewks 1368 14.03.13 10:24 Сейчас в теме
(104) спасибо. вроде, выстрадал, перелопатил больше половины модуля http://infostart.ru/public/177766/
102. andrewks 1368 08.03.13 22:40 Сейчас в теме
в родном примере объявляются три интерфейса:
IInitDoneBase, ILanguageExtenderBase, LocaleBase
далее - класс IComponentBase, объединяющий в себе все три этих интерфейса
и конечный юзерский класс уже просто объявляется как наследник IComponentBase
и именно конечный класс потом используется для создания объекта в GetClassObject и помещается в IComponentBase** pInterface
никаких структур, никакого хардкора.
осталось только понять, как это записать на FPC, чтобы родная схема взлетела. в лоб у меня пока не получилось - интерфейсы объявил, класс, объект создаю, возвращаю его 1С, затем - сразу падение. ни один метод не вызывается вопрос отпал, освежил теорию. только извращения через рекорды, или делать отдельную интрефейсную прокси-библиотеку, что, в общем-то, тоже будет извратом
108. v77 160 26.03.13 10:26 Сейчас в теме
1с не разрешает такое делать. Можно только возвратить массив из ВК.
109. MarSeN 984 08.04.13 16:30 Сейчас в теме
(0) v77
Спасибо за шаблон. Полезная штука!
А как можно передать в ВК объект 1С в качестве параметра (к примеру объект метаданных "Метаданные")
110. Magister 134 08.04.13 22:35 Сейчас в теме
(109) Ну почему все так не любят читать документацию?
Почитайте описание NativeAPI от 1С, там всё написано.
Передавать можно только простые типы. Объекты - нет.
111. MarSeN 984 09.04.13 00:32 Сейчас в теме
112. sppr 11.11.13 17:12 Сейчас в теме
Респект автору но у меня из демо примера не работает на веб... на тонком все работает на веб пишет "Тип не определен"... что я не правильно делаю.. заранее спасибо
113. MarSeN 984 07.02.14 23:00 Сейчас в теме
Не могу запустить депо dll на Lazarus. Проект собирается, но длл не грузится. В чем может быть проблема?
Windows 7 64bit
114. bashinsky 133 05.08.14 15:45 Сейчас в теме
При компиляции проекта, который указан в публикации, на lazarus, вылетает ошибка на коде регистрации функции
AddFunc('Hello', 'Привет', @TMyClass.Hello, 0);

miniVK.lpr(24,49) Error: Incompatible type for arg no. 3: Got "<address of function(PV8Variant,PV8ParamArray,const LongInt):Boolean of object;Register>", expected "PV8CallAsFunc"

Пробовал на win 7 32бит и 64бит, также пробовал с компонентой от andrewks, та же ошибка.
Может кто-нибудь помочь?
Прикрепленные файлы:
115. monkbest 115 22.09.14 18:12 Сейчас в теме
Скачал второй архив Вариант для FreePascal (Lazarus). Эта компонента не регистрируется.
У меня Вин 7 64. Надо было первый архив качать?
116. monkbest 115 22.09.14 18:14 Сейчас в теме
для варианта размещения компоненты в общем макете в конфе и её авторегистрацие кодом 1С можете образец написать?
117. v77 160 23.09.14 10:11 Сейчас в теме
(116) monkbest,

Загрузка ВК из макета в 1С 8.3

1. Создаем ВК. Например "demo.dll"

2. Создаем файл "manifest.xml" файл с таким содержанием

<?xml version="1.0" encoding="UTF-8" ?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">
<component os="Windows" path="demo.dll" type="native" arch="i386" />
</bundle>

3. Пакуем "demo.dll" и "manifest.xml" в zip-архив

4. Создаем в конфигурации общий макет с именем "ТестВК" и загружаем в него наш zip-архив

5. Пишем где надо примерно такой код:

//это пример загрузки ВК, которая генерирует внешнее событие
&НаКлиенте
Перем ОбъектВК, ИмяМакета;

&НаКлиенте
Процедура Старт(Команда)
//ПодключитьВнешнююКомпоненту("C:\temp\external_event\testVK

\demo.dll","DemoLib",AddInType.Native);
ИмяМакета = "ОбщийМакет.ТестВК";
Если НЕ ПодключитьВнешнююКомпоненту(ИмяМакета,"DemoLib",AddInType.Native) Тогда
НачатьУстановкуВнешнейКомпоненты(Новый ОписаниеОповещения("ЗагрузкаВК",

ЭтотОбъект),ИмяМакета);
Возврат;
КонецЕсли;
СоздатьОбъектВК();
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбъектВК()
ОбъектВК = Новый("AddIn.DemoLib.Пример");
ОбъектВК.Старт();
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузкаВК(Парам) экспорт
Если ПодключитьВнешнююКомпоненту(ИмяМакета,"DemoLib",AddInType.Native) Тогда
СоздатьОбъектВК();
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Стоп(Команда)
ОбъектВК.Стоп();
ОбъектВК = Неопределено;
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Состояние(Данные);
КонецПроцедуры

118. Lancer1C 26.12.14 09:18 Сейчас в теме
Александр, спасибо за разработку! Просто мегаполезная вешь!
Написал на её основе свою ВК, все замечательно работает и на клиенте, и на сервере.
Сейчас столкнулся вот с какой проблемой: До этого момента сервер 1С Предприятия стоял 32-разрядный на Windows Server 2008 x64, после установки x64 сервера 1C не удается подключить компоненту.
Ошибка происходит только в методах, выполняемых &НаСервере. При попытке вызвать функцию
ПодключитьВнешнююКомпоненту(..., ..., ТипВнешнейКомпоненты.Native)
1С-ка подвисает на несколько секунд, а затем выдает ошибку сетевого доступа.
При этом может выкинуть из программы некоторых пользователей, вне зависимости от того с какой базой они работают.
Если подключать компоненту, скомпилированную под x86, то функция просто возвращает Ложь и работа продолжается. Пробовал подключать компоненту как из файла, так и из общего макета с манифестом - результат всегда один.
При подключении с клиента, функции ВК вызываются как обычно:
_Init
_setMemManager
_SetLocale
_GetInfo
_RegisterExtensionAs
А на сервере эта же последовательность вызывается аж 11 раз, после чего все падает.
Может есть какие мысли по этому поводу? Как можно решить возникшую проблему?
119. v77 160 26.12.14 10:29 Сейчас в теме
(118) Lancer1C, попробуй это http://infostart.ru/public/177766/ там вроде обещают, что везде работает
120. Lancer1C 26.12.14 10:59 Сейчас в теме
(119) Пробовал, правда делал это впопыхах. RAD Studio дико ругалась на тот v8napi, арифметика с указателями ей не нравилась, быстренько поправил, скомпилировал, но в итоге и на клиенте и на сервере ПодключитьВнешнююКомпоненту возвращает Ложь. Может сам чего намудрил, конечно. Лазарусом воспользоваться не смог, т.к. там нет некоторых модулей для моей компоненты.
Пробовал, кстати, скомпилировать простой sample из вашего архива. В результате тоже рвется соединение при попытке подключить компоненту.
121. v77 160 26.12.14 15:14 Сейчас в теме
(120) Lancer1C, у меня нет сервера 1с. Не могу ничем помрчь
122. ALLES 65 04.01.15 21:44 Сейчас в теме
Юзаю demo.dll на Вин7х64. Движок 8.3.5.1383 - Управляемые формы, 1С запущена от имени Одмина. Компонента подключается нормально (возвращает истину), создается объект норм, видно пару его реквизитов. А вот когда идет обращение к первой функции из примера работы с компонентой из 1С: сама 1С вылетает по ошибке. У меня есть свои компоненты написанные по .СОМ - работают норм.. чо не так?

Создал свой длл из шаблона - вроде норм. Работает на стороне сервера в тонком клиенте, что мне и требовалось. Вопрос снят
123. capitan 2466 27.03.15 16:45 Сейчас в теме
Огромное спасибо автору. Да не оскудеет инфостарт такими людьми.
124. MrAndersons 08.04.15 18:01 Сейчас в теме
На 8.3.6 не работает
Прикрепленные файлы:
125. oleg.rizvanov 261 28.04.15 22:57 Сейчас в теме
(124) MrAndersons,

Похоже, в 8.3.6.х ошибка в memManager-е

На форуме Simplit есть ветка про похожий случай
127. v77 160 06.10.15 14:28 Сейчас в теме
(124) MrAndersons, теперь работает. качайте новый v8napi.pas
126. Demanoidos 64 18.06.15 12:03 Сейчас в теме
Здравствуйте. Каким образом мне скачать эту библиотеку? Я разработчик, но инфостарт требует от меня денег за получение ссылки на закачку бесплатной компоненты.

Может мне кто-то помочь и дать ссылку на эту компоненту?
vvacum; user634897_chukbushmen; +2 Ответить
128. nytlenc 23.10.15 08:18 Сейчас в теме
Хочу свой JabberClient запилить. Как с помощью Вашей компоненты обработать событие при котором поступает входящее сообщение?

ОбработкаВнешнегоСобытия(<Источник>, <Событие>, <Данные>)
Параметры:

<Источник>

Тип: Строка.
Источник события.
<Событие>

Тип: Строка.
Наименование события.
<Данные>

Тип: Строка.
Данные для события.
Описание:

Возникает при посылке внешним приложением сообщения, сформированного в специальном формате. Внешнее событие сначала обрабатывается всеми открытыми формами, имеющими процедуру-обработчик этого события, а затем может быть обработано в процедуре-обработчике модуля управляемого приложения (модуля обычного приложения).
Примечание:

Обработка следующего события возможна только после завершения обработки текущего события.
129. v77 160 23.10.15 11:58 Сейчас в теме
130. nytlenc 12.11.15 17:35 Сейчас в теме
(129) Спасибо!!! Все получилось :)
131. nytlenc 23.12.15 13:45 Сейчас в теме
На сервере x64 не работает...

x32 пробовал только файловый вариант ИБ, (сервер приложений не тестил), в файловой ИБ x32 вызываю процедуру "ПодключитьВнешнююКомпоненту()", возвращает истину, выгружаю базу на сервер приложений x64 - там возвращает ложь:

&НаСервере
Процедура СоздатьНаСервере()
        ПодключитьВнешнююКомпоненту("ОбщийМакет.Jabber", "Jabber", ТипВнешнейКомпоненты.Native); // Файловая ИБ x32 = Истина; Сервер приложений x64 = Ложь
КонецПроцедуры
132. v77 160 23.12.15 18:42 Сейчас в теме
(131) nytlenc, ну я твою ВК не видел. я так ничего сказать не могу. Вышли, я гляну.
133. nytlenc 24.12.15 03:55 Сейчас в теме
(132) Прошу прощения, сам баран (не иначе) скомпилировал проект под Win32 и еще хочу, чтобы он под Win64 поехал. Все работает, спасибо. Извините за беспокойство. :) И еще раз спасибо Вам за бесценную вещь в виде v8napi!!!
134. 7OH 69 25.12.15 01:01 Сейчас в теме
Не хватает реализации метода SetPlatformCapabilities
Похоже, что без него запустить компоненту можно только в клиенте 1С.
Под IE или FireFox постоянно кричит, что клиент не поддерживается.
Функция должна вернуть доступные возможности, а её нет.
Можете доделать ?
135. v77 160 25.12.15 09:26 Сейчас в теме
(134) 7OH, да вроде есть там такая функция. Я правда не понимаю, что это такое, но на всякий случай написал как в примере от 1с..

function SetPlatformCapabilities(const capabilities: integer): integer; cdecl;
begin
result := 1;
end;
136. пользователь 24.02.16 17:56
Сообщение было скрыто модератором.
...
137. frkbvfnjh 785 03.03.16 20:38 Сейчас в теме
Вообще слов нет! Просто бомба. Спасибо тебе автор за это произведение искусства! А главное, что ты продолжаешь поддержку своего детища, другие годами не обновляют свои шаблоны внешних компонент. И главное, что разработка на Delphi - в наше время все меньше людей которые пишут на Delphi. Даже на ИТС примеров на Delphi уже не делают :( Очень печально, хотя новый Delphi вновь набирает обороты. Продолжай развивать данную разработку.
138. DAN397 09.03.16 18:42 Сейчас в теме
Добрый день!
Написал вот свой класс драйвера для ФР по правилам "1С: Совместимо" на Delphi с использованием модуля v8napi.pas. Подключаюсь толстым клиентом к локальной ИБ.
При попытке установить драйвер в 1С 8.3 (Управление торговлей 11.2), из файла указываю путь к zip-архиву с драйвером. Manifest.xml и Info.xml бодро подхватываются и видно информацию о драйвере. Дальше вот наблюдаю такую картину: при подключении драйвера пишет в самой нижней строке красным шрифтом: Не установлен на текущем компьютере. Не определен тип: AddIn.ICSFPNative.ICSFP_V2. При нажатии кнопки "Функции - > Установить драйвер" выдаёт сообщение "Внешняя компонента уже подключена".
Может кто подскажет куда копать? Может у меня старый модуль n8api (2011 год)?


Прикрепленные файлы:
driver.zip
140. v77 160 10.03.16 09:06 Сейчас в теме
(138) DAN397, в этих "1С: Совместимо" я разбираться не буду, но как минимум одна ошибка у тебя есть: в файле MANIFEST.XML убери component c x86_64, ибо у тебя dll только i386, а если будешь делать dll x86_64, то называй её по другому (например ICSFPNative64.dll).
А так, смотри где сам накосячил. v8napi.pas здесь не причем.
139. DAN397 09.03.16 18:44 Сейчас в теме
Вот забыл добросить картинку.
Прикрепленные файлы:
141. DAN397 10.03.16 11:10 Сейчас в теме
Огромное спасибо за ответ. Буду искать свой косяк.
142. Greysvandir 07.04.16 14:40 Сейчас в теме
Здравствуйте! А не подскажите как можно реализовать в компоненте параллельный поток?

Я в компоненте описываю класс:
TMusThread = class(TThread)
    procedure Execute; override;
  public
    Notes: String;
    Speaker: boolean;
  end;


Затем в функции, которую вызываю из 1С, создаю экземпляр этого класса и запускаю:
function VSMusic.PlayMusic(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
begin
 AMusThread := TMusThread.Create(true);
 AMusThread.FreeOnTerminate := true;
 AMusThread.Priority := tpNormal;
 AMusThread.Notes := V8AsAString(@Params[1]);
 AMusThread.Speaker := V8AsBool(@Params[2]);
 AMusThread.Execute;
 Result:=true;
end;
Показать


Но интерфейс 1С всё равно подвисает до тех пор пока не закончится выполнение этого доп потока. Не подскажите что я делаю не так или в 1С вообще нельзя сделать доп поток? У меня платформа 8.3.7.2008. К слову, я сделал приложение на делфи, которое делает то же самое и там поток нормально работает, ничего не виснет.
143. v77 160 07.04.16 18:43 Сейчас в теме
(142) Greysvandir,

AMusThread.Resume вместо AMusThread.Execute;
Greysvandir; +1 Ответить
144. Greysvandir 08.04.16 09:24 Сейчас в теме
(143)

Большое спасибо! Никогда бы не догадался попробовать Resume вместо Execute. Я всегда думал что Execute запускает поток, а Resume используется только после Suspend. И в Delphi то ведь работает через Execute, это что-то 1Ской обусловлено?
145. v77 160 08.04.16 13:19 Сейчас в теме
(144) Greysvandir, а где написано, что Execute запускает поток? Я такого нигде не встречал.
146. Greysvandir 11.04.16 12:38 Сейчас в теме
(145)
Я помню когда учился потоки использовать читал статью чью-то и там было написано что запуск потока через Exucute. Сейчас тоже погуглил всё поновой, видимо я просто всегда ошибался. Еще раз большое спасибо!
147. s0nya 20.04.16 08:17 Сейчас в теме
v77, подскажите, что влияет на
06.10.2015 Исправлена ошибка: сообщение "некорректная работа компоненты с памятью"

На основе Вашей работы 2 года назад сделал библиотеку для работы с специфичным устройством, теперь на 8.3.7 вываливается вышеописанная ошибка. Писал всё на RAD Studio XE. Довольно сложно ваш файл к ней адаптировать.
148. v77 160 20.04.16 13:41 Сейчас в теме
(147) s0nya, попробуй заменить эти функции

function _GetPropName(Obj: PV8ObjectRec; lPropNum, lPropAlias: integer)
: PWideChar; stdcall;
begin
if lPropAlias = 0 then
result := Obj.RelObj1.V8AllocWideString(Obj.RelObj1.ClassReg.PropList[lPropNum].PropName)
else
result := Obj.RelObj1.V8AllocWideString(Obj.RelObj1.ClassReg.PropList[lPropNum].PropNameLoc);
end;

function _GetMethodName(Obj: PV8ObjectRec; const lMethodNum,
lMethodAlias: integer): PWideChar; stdcall;
begin
if lMethodAlias = 0 then
begin
result := Obj.RelObj1.V8AllocWideString(Obj.RelObj1.ClassReg.MethList[lMethodNum].MethName);
end
else
begin
result := Obj.RelObj1.V8AllocWideString(Obj.RelObj1.ClassReg.MethList[lMethodNum].MethNameLoc);
end;
end;
149. s0nya 20.04.16 14:31 Сейчас в теме
(148)
Ошибка
[DCC Error] v8napi.pas(553): E2003 Undeclared identifier: 'V8AllocWideString'

нужен еще метод.
150. v77 160 20.04.16 18:42 Сейчас в теме
(149) s0nya, ну найди его в новом файле и скопируй в свой
151. s0nya 21.04.16 11:46 Сейчас в теме
(150) Спасибо, скачал новый файл, он полностью без изменений скормился RAD Studio XE. Ошибок в работе нет, большое спасибо за работу!
203. sh0p3n 14.05.20 22:10 Сейчас в теме
(148)
Еще надо заменить _RegisterExtensionAs по такому же принципу и все будет работать и со старой версией v8napi.pas
152. PosService 31.07.16 17:48 Сейчас в теме
Не могу понять , есть процедура ExtEvent которая генерирует внешнее событие, если я ее вызываю из 1С, то все хорошо событие генерируется и обрабатывается 1С , если я вызываю ExtEvent из самой компоненты, то компонента вылетает с ошибкой и закрывает платформу.

procedure IFSFDRV.ExtEvent();
begin
v8.ExternalEvent(pWideChar('aaa'), pWideChar('bbb'), pWideChar('ccc'));
end;
153. v77 160 01.08.16 09:32 Сейчас в теме
(152) PosService, ну наверное понаписал ошибок каких нибудь. кода нет, показать ошибку не могу.
154. PosService 01.08.16 10:41 Сейчас в теме
(153)

извиняюсь , вопрос точнее в следующем: Не пойму как вызвать Данную процедуру класса:

type IFSFDRV = class(TV8UserObject)
public
Procedure ExtEvent;
end;

procedure IFSFDRV.ExtEvent();
begin
v8.ExternalEvent(pWideChar('aaa'), pWideChar('bbb'), pWideChar('ccc'));
end;

Я пытыюсь вызвать из другой процедуры

Procedure MyProc;
var
IFSF:IFSFDRV;
Begin
IFSF.ExtEvent();
End;

Получаю ошибку =(( Что-то я забыл походу , а что не пойму.
155. v77 160 01.08.16 14:33 Сейчас в теме
(154) PosService,
"pWideChar('aaa')" это вообще компилится? по логике не должно.

Procedure MyProc;
var
IFSF:IFSFDRV;
Begin
IFSF.ExtEvent();
End;

вообще мура какая то. вызываете метод неинициализорованного объекта
156. PosService 01.08.16 14:55 Сейчас в теме
(155) да, компилится, я пробовал и без указания pWideChar, а как тогда вызвать метод класса из обычной процедуры ? Заранее спасибо.
157. v77 160 01.08.16 18:39 Сейчас в теме
(156) в книжке почитай. Здесь азы программирования не обсуждаются.
158. PosService 02.08.16 00:33 Сейчас в теме
(157) нормально ответить я так понимаю выше вашего достоинства ? Вылетает именно на v8.ExternalEvent('a','b','c'); , все что до этой строки в методе объекта все выполняется.
159. v77 160 02.08.16 08:09 Сейчас в теме
(158) Объясните, что должна делать ваша ВК, высылайте код и я покажу где ошибка.
160. PosService 02.08.16 11:19 Сейчас в теме
(159) unit Main; Ну вот Допустим пример , Из 1с метод ExtEvent вызывается нормально, отрабатывает генерирует внешнее событие , его подхватывает 1с и обрабатывает и все хорошо. Но как только я пытаюсь вызвать метод ExtEvent из самой внешней компоненты таким способом: MyIFSF.ExtEvent(); отрабатывает showmessage('СОБЫТИЕ !!!!'); а дальше краш.

interface

uses
System.SysUtils,
Dialogs,
system.IniFiles,
System.Classes,
COMDRV32,
CRC16,
COMPort,
StringFunc,
LonParser,
v8napi;

type IFSFDRV = class(TV8UserObject)
Public
Procedure OpenPort;
Procedure ClosePort;
Procedure ExtEvent;
end;


var
MyIFSF:IFSFDRV;

implementation

//Вызов внешнего события
Procedure IFSFDRV.ExtEvent();
begin
showmessage('СОБЫТИЕ !!!!');
v8.ExternalEvent('a','b','c');
end;



//Процедура открытия КОМ порта
Procedure IFSFDRV.OpenPort();
begin
COMPort.OpenPort();
end;

//Проведура Закрытия КОМ порты
Procedure IFSFDRV.ClosePort();
begin
ComPort.ClosePort();
end;

end.
161. v77 160 02.08.16 16:05 Сейчас в теме
(160) Ну и где здесь код, который вызывает IFSFDRV.ExtEvent()?
Объясните, что должна делать ваша ВК, высылайте код и я покажу где ошибка.
162. v77 160 02.08.16 16:06 Сейчас в теме
Да и что вы пишите в 1С мне тоже неизвестно. Может там ошибка.
163. v77 160 02.08.16 16:30 Сейчас в теме
Вот пример генерации внешнего события

library demo;

uses
SysUtils, Classes, v8napi;

type
TMyClass = class;

TMyThread = class(TThread)
P: TMyClass;
procedure Execute; override;
end;

TMyClass = class(TV8UserObject)
private
T: TMyThread;
procedure FreeT;
public
Counter: integer;
function Start(Params: PV8ParamArray;
const ParamCount: integer): boolean;
function Stop(Params: PV8ParamArray;
const ParamCount: integer): boolean;
destructor Destroy; override;
constructor Create; override;
end;


{ TMyClass }

constructor TMyClass.Create;
begin
T := nil;
Counter := 0;
TestV := '';
end;

destructor TMyClass.Destroy;
begin
FreeT;
inherited Destroy;
end;

procedure TMyClass.FreeT;
begin
if T <> nil then
begin
T.Terminate;
T.WaitFor;
FreeAndNil(T);
end;
end;

function TMyClass.Start(Params: PV8ParamArray;
const ParamCount: integer): boolean;
begin
Counter := 0;
if T = nil then
begin
T := TMyThread.Create(True);
T.P := self;
T.Resume;
end;
result := True;
end;

function TMyClass.Stop(Params: PV8ParamArray;
const ParamCount: integer): boolean;
begin
FreeT;
result := True;
end;


{ TMyThread }

procedure TMyThread.Execute;
var
S : WideString;
begin
while not Terminated do
begin
inc(P.Counter);
S := IntToStr(P.Counter) + ' привет из Delphi';
P.V8.ExternalEvent('моя вк', 'привет', @S[1]);
sleep(2000);
end;
end;

begin

//Регистрация класса
with ClassRegList.RegisterClass(TMyClass, 'Пример', 'TMyClass') do
begin
AddProc('Start', 'Старт', @TMyClass.Start);
AddProc('Stop', 'Стоп', @TMyClass.Stop);
end;

end.
165. PosService 04.08.16 12:18 Сейчас в теме
(163) , Спасибо , в потоке, так в потоке ) тоже вариант )
166. v77 160 04.08.16 17:06 Сейчас в теме
(165) Ну других вариантов и не бывает. Либо сам вызываешь, либо асинхронно в отдельном потоке.
164. v77 160 02.08.16 16:30 Сейчас в теме
&НаКлиенте
Перем ОбъектВК, ИмяМакета;

&НаКлиенте
Процедура Старт(Команда)
	//ПодключитьВнешнююКомпоненту("C:\temp\external_event\testVK\demo.dll","DemoLib",AddInType.Native);
	ИмяМакета = "ОбщийМакет.ТестВК";
	Если НЕ ПодключитьВнешнююКомпоненту(ИмяМакета,"DemoLib",AddInType.Native) Тогда	
		НачатьУстановкуВнешнейКомпоненты(Новый ОписаниеОповещения("ЗагрузкаВК", ЭтотОбъект),ИмяМакета);
		Возврат;
	КонецЕсли;
	СоздатьОбъектВК();
КонецПроцедуры

&НаКлиенте
Процедура СоздатьОбъектВК()
	ОбъектВК = Новый("AddIn.DemoLib.Пример");	
	ОбъектВК.Старт();	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузкаВК(Парам) экспорт
	Если ПодключитьВнешнююКомпоненту(ИмяМакета,"DemoLib",AddInType.Native) Тогда
		СоздатьОбъектВК();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Стоп(Команда)
	ОбъектВК.Стоп();
	ОбъектВК = Неопределено;
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные) 	
	Состояние(Данные);
КонецПроцедуры
Показать
167. dreamadv 155 25.10.16 21:37 Сейчас в теме
Киньте в меня v8napi.pas dream_adv@inbox.ru так не кстати закончился баланс (( Автор готов лично отблагодарить.
168. sinas 10.11.16 17:08 Сейчас в теме
помучился прилично с модулем v8napi ... кажется там есть неприятная ошибка ... при вызове методов компоненты им передается не запись на PV8ObjectRec (то есть ссылка на объекты компоненты) а ссылка на сам интерфейс. Например в метод SetLocale передается I3 записи PV8ObjectRec
а вообще автору n8napi низкий поклон (я вспомнил что знаю delphi и не много изучил C++ при проверке исходников на ИТС)
169. mdSerg 03.12.16 19:25 Сейчас в теме
Нет у меня мани - поделитесь плиз без мани.
170. Greysvandir 27.01.17 10:55 Сейчас в теме
Здравствуйте! А не подскажете как надо преобразовать методы внешней компоненты для работы в веб клиенте? Я сделал простейшую компоненту, которая просто выводит текст в строку сообщений 1С, в тонком клиенте работает хорошо, в веб я её преобразовал с помощью примеров и документации 1С (https://its.1c.ru/db/metod8dev/content/3221/hdoc) , сделал расширение для Chrome, подключается она нормально, но при попытке вызвать метод компоненты, выдается ошибка - Использование синхронных методов на клиенте запрещено. Не могу понять что нужно сделать, чтобы браузер считал метод асинхронным. Метод добавлен в класс через AddProc.
171. Greysvandir 30.01.17 19:56 Сейчас в теме
Оказывается ничего в компоненте делать не надо))

Использование внешних компонент в асинхронном режиме имеет ряд особенностей:

1. Подключение внешней компоненты выполняется с помощью асинхронного метода НачатьПодключениеВнешнейКомпоненты().

2. Для обращения к свойствам внешней компоненты следует использовать асинхронные методы НачатьУстановку<ИмяСвойства>() и НачатьПолучение<ИмяСвойства>().

3. Вместо обращения к методу компоненты следует использовать асинхронные методы НачатьВызов<ИмяМетода>().

Методы Начать…() автоматически добавляются платформой к существующим свойствам и методам внешней компоненты. Саму внешнюю компоненту не требуется отдельно перерабатывать для поддержки работы в асинхронном режиме.

Для метода НачатьВызов…() первым параметров следует указывать описание оповещения, а остальные параметры соответствуют набору параметров оригинального метода внешней компоненты.

При использовании веб-браузеров Google Chrome и Mozilla Firefox поддерживается только асинхронное подключение и использование внешних компонент, в том время как для других веб-браузеров допустимо использование как синхронного, так и асинхронного способа работы. Это определяется свойством конфигурации Режим использования синхронных вызовов расширений платформы и внешних компонент
alex25ru; kirillkr; PetrPan; +3 Ответить
172. 7OH 69 31.01.17 14:49 Сейчас в теме
Подскажите, что надо сделать, чтобы передать в компоненту двоичные данные (картинку) ?

Возврат ИЗ компоненты сделал - работает.

V8SetBlob(propValue, PByte(strPicture), Length(strPicture));

а вот при попытке внутрь передать двоичные данные - 1с даже не пытается походу и выдаёт ошибку "Неверный аргумент" и хоть тресни.

173. Greysvandir 31.01.17 18:39 Сейчас в теме
(172) Думаю проще всего преобразовать ДД в Base64 строку и передать как строку, а в компоненте обратно преобразовать. В 1С - Base64Строка(<Значение>), в Delphi - DecodeBase64(<String>)
180. k268kk 12.01.18 18:12 Сейчас в теме
(173) Да ну, не проще. В pstrVal же однобайтовые AnsiChar, приводи к TBytes и ограничь этот массив по V.VarEnum.vtRecString.strLen.
Попробовал записать в файл, все гуд)) и всего 2 строчки кода!
174. 7OH 69 31.01.17 22:15 Сейчас в теме
Так и начал делать.
На стороне делфи затык:

Ss := TStringStream.Create('');
strTmp := DecodeString(V8AsAString(@Params[1]));
Ss.WriteString(strTmp);

jpg := TJPEGImage.Create;
jpg.LoadFromStream(Ss);

---
И тут меня TJpeg посылает, типа это на JPEG не похоже.
А в какой библиотеке взять DecodeBase64 ?
У меня DecodeString из EncdDecd.
175. ImHunter 312 01.02.17 07:47 Сейчас в теме
(174)
Попробуйте в TBitmap загружать.
Я в своей компоненте делаю обратное действие - возвращаю картинку из TBitmap.
  try
    FBitmap.SaveToStream(MS);
    V8SetBlob(RetValue, MS.Memory, MS.Size);
  finally
    MS.Free;
    FBitmap.Free;
  end;
176. Greysvandir 01.02.17 09:23 Сейчас в теме
(174) Может виноват DecodeString. Щас напишу рабочий пример (у меня работает во всяком случае на Delphi 7)
1C:
ДД = Новый ДвоичныеДанные("C:\1111.jpg");
TestPictures.ОтправитьКартинку(Base64Строка(ДД));


Delphi:
// Base64 decoding ( в инете нашел )
function DecodeBase64(const CinLine: string): string;
const
  RESULT_ERROR = -2;
var
  inLineIndex: Integer;
  c: Char;
  x: SmallInt;
  c4: Word;
  StoredC4: array[0..3] of SmallInt;
  InLineLength: Integer;
begin
  Result := '';
  inLineIndex := 1;
  c4 := 0;
  InLineLength := Length(CinLine);

  while inLineIndex <= InLineLength do
  begin
    while (inLineIndex <= InLineLength) and (c4 < 4) do
    begin
      c := CinLine[inLineIndex];
      case c of
        '+'     : x := 62;
        '/'     : x := 63;
        '0'..'9': x := Ord© - (Ord('0')-52);
        '='     : x := -1;
        'A'..'Z': x := Ord© - Ord('A');
        'a'..'z': x := Ord© - (Ord('a')-26);
      else
        x := RESULT_ERROR;
      end;
      if x <> RESULT_ERROR then
      begin
        StoredC4[c4] := x;
        Inc(c4);
      end;
      Inc(inLineIndex);
    end;

    if c4 = 4 then
    begin
      c4 := 0;
      Result := Result + Char((StoredC4[0] shl 2) or (StoredC4[1] shr 4));
      if StoredC4[2] = -1 then Exit;
      Result := Result + Char((StoredC4[1] shl 4) or (StoredC4[2] shr 2));
      if StoredC4[3] = -1 then Exit;
      Result := Result + Char((StoredC4[2] shl 6) or (StoredC4[3]));
    end;
  end;
end;

function AddInTestPictures.SendPicture(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
var
  stream: TStringStream;
  //mstream: TMemoryStream;
  jpg: TJPEGImage;

begin

  stream := TStringStream.Create(DecodeBase64(V8AsAString(@Params[1])));
  {mstream := TMemoryStream.Create;
  mstream.LoadFromStream(stream);
  mstream.SaveToFile('C:\test.jpg');}

  jpg := TJPEGImage.Create;
  jpg.LoadFromStream(stream);
  jpg.SaveToFile('C:\test2.jpg');

  V8SetBool(RetValue, true);
  Result:=true;

end;
Показать


TMemoryStream сделал просто попробовать, сохраняется картинка и test1 и test2.
177. 7OH 69 01.02.17 10:20 Сейчас в теме
(176) Разобрался, спасибо.
Проблема была не в DecodeString.
Проблема оказалась в инициализации Потока и его позиционированием.
DecodeString кстати тоже потоками кодирует строку успешно.
178. 7OH 69 10.02.17 14:08 Сейчас в теме
Кто может помочь - может в личке.
Поставил XE8.
Где-то нелады со строками.
Получаю строку, декодирую функцией выше.
Сохраняю в файл, но файл ни один просмотрщик не принимает.
Если пытаться декодировать через DecodeString или DecodeBase64(вариант родной делфи), то выдаёт No mapping for the Unicode character exists in the target multi-byte code page."
179. 7OH 69 10.02.17 15:29 Сейчас в теме
(178) Решилось через
strPic := TEncoding.Default.GetString(TNetEncoding.Base64.Decode(TEncoding.Default.GetBytes(V8AsAString(@Params[1]))));
181. 7OH 69 05.03.18 18:12 Сейчас в теме
Добрый день.
Не подскажете - как на форме на кнопке реализовать вызов ExternalEvent ?

в модуле проекта как водится
with ClassRegList.RegisterClass(TMyClass, 'ComponentName', 'TMyClass') do
begin
//AddFunc( 'Name', 'Имя', @АдресФункции, КвоПараметров);
//AddProc( 'Name', 'Имя', @АдресФункции, КвоПараметров);
--
Потом открываю форму, что-то делаю, а после закрытия читаю в 1С результаты.
--
Хочется сделать нормально - посылать результаты прямо в 1С.
182. 7OH 69 05.03.18 18:35 Сейчас в теме
(181)
добавил при старте - записываю в переменную у себя на форме - ссылку на входной класс

 function TMyClass.Start(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8: V8AddInDefBase): boolean;
var i : integer;
begin

  Form1 := TForm1.Create(Application);
  frmCapture.PForm1 := @Form1;
  Form1.myV8   := @v8;

---
переменная объявлена в форме
myV8 : TV8AddInDefBase;
---
ну и сам вызов на форме
myV8.ExternalEvent('aaa', 'bbb', 'ccc' );
---
собственно ошибку не вызывает, но и в 1С ничего не приходит.
183. 7OH 69 05.03.18 22:42 Сейчас в теме
(182) хм - пока дошёл домой - подумал.
Заменил
Form1.myV8 := @v8;
на
Form1.myV8 := Self.V8;
---
теперь посылает, но как в примере выше - только после выхода.
Если оно в потоке работает - ща буду думать, как приспособить поток для вызова оповещения по требованию.
184. 7OH 69 05.03.18 23:25 Сейчас в теме
(183) а поток оказался не нужен - просто 1С ждёт ответа - запустилась ли компонента.
А при открытии формы модально в момент старта компоненты - ответа то нет.
Убрал модальное открытие формы - теперь могу из формы посылать события - красотища.
186. Melkij 14.05.18 22:26 Сейчас в теме
Скинте новый v8napi.pas в приват.
Старый на 8.3 отваливается ошибка памяти.

Буду благодарен.
187. KingLion 31.05.18 16:29 Сейчас в теме
Вопрос к автору. Скачал архив из этой раздачи, а в нём как оказалось шаблон компоненты от 2012 года, хотя в описании написано, что в архиве тот же файл модуля. Нельзя ли изменить описание файлов с учётом даты их обновлений? И как мне теперь быть в этой ситуации? Очень не хотелось бы тратить ещё одну стармани для того чтоб повторно качать то, что должно было быть в архиве...
188. kkmprog 25.08.18 22:50 Сейчас в теме
У меня есть модуль от декабря 15 года. Это самая последняя версия библиотеки?
Пытался использовать этот модуль для разработки интеграционной библиотеки для драйвера оборудования, реализованного в виде стандартного сервера автоматизации (т.е. написать прослойку). Вроде все делаю по документации, но при попытке вызвать методы DLL 1С молча вылетает. Компилирую при помощи Delphi 10.1. Вот пример кода:
function TKKTDrv.GetVersion(RetValue: PV8Variant; Params: PV8ParamArray;
  const ParamCount: Integer; var v8: TV8AddInDefBase): Boolean;
begin
  try
    WriteLog('GetVersion...');
    V8SetWString(RetValue, DriverVersion);
    Result := True;
    WriteLog('Result = ' + DriverVersion);
  except
    on e: Exception do
    begin
      V8SetWString(RetValue, ''); // результат функции
      Result := ErrorHandler(Word(c_unknown), e);
    end;
  end;
end;

function TKKTDrv.Open(RetValue: PV8Variant; Params: PV8ParamArray;
  const ParamCount: Integer; var v8: TV8AddInDefBase): Boolean;
var
  s: WideString;
  ecode: Integer;
begin
  ecode := c_unknown;
  try
    WriteLog('Open...');
    if ParamCount <> 1 then
    begin
      ecode := c_param_wrong_num;
      raise Exception.Create(LocStr(c_param_wrong_cnt_en, c_param_wrong_cnt_ru));
    end;
    s := '0123456789'; // ID устройства
    fDeviceId := s;
    V8SetWString(@Params[1], s);
    V8SetBool(RetValue, True); // результат функции
    Result := True;
    WriteLog('Result = 0');
  except
    on e: Exception do
    begin
      V8SetBool(RetValue, False); // результат функции
      Result := ErrorHandler(Word(ecode), e);
    end;
  end;
end;

function TKKTDrv.ErrorHandler(const ResCode: Word; E: Exception): Boolean;
begin
  fLastErrCode := ResCode;
  fLastErrDesc := e.Message;
  WriteLog(Format('Result = %d (%s)', [fLastErrCode, fLastErrDesc]));
  V8SetBool(RetValue, False); // результат функции
  Result := False;
  V8.AddError(ResCode, PWideChar(LocStr(c_ext_comp_en, c_ext_comp_ru)), PWideChar(fLastErrDesc), E_FAIL);
end;

// ...

begin
  with ClassRegList.RegisterClass(TKKTDrv, 'TKKTDrv', 'TKKTDrv') do
   begin
     AddFunc('GetVersion', 'ПолучитьНомерВерсии', @TKKTDrv.GetVersion, 0);
     AddFunc('Open', 'Подключить', @TKKTDrv.Open, 1);
     // ...
end;
Показать


ЧЯДНТ?
189. Viet 20.12.18 12:49 Сейчас в теме
(188) Столкнулся с похожей ситуацией. Подключал компоненту в Розница 2.2. Если я правильно понимаю, 1С опять не выложил половину из новых требований и в момент опроса прослойки идет вызов не процедуры ПолучитьНомерВерсии а процедуры НачатьВызовПолучитьНомерВерсии, описание которого пока нигде не нашел. Если нашли решение - поделитесь пожалуйста
205. sh0p3n 15.05.20 20:34 Сейчас в теме
(188)
Судя по всему 1С 32 разрядная... а проблема в том, что в объявлениях методов надо убрать последний параметр
; var v8: TV8AddInDefBase

т.е. было:
function TKKTDrv.GetVersion(RetValue: PV8Variant; Params: PV8ParamArray;
  const ParamCount: Integer; var v8: TV8AddInDefBase): Boolean;

стало:
function TKKTDrv.GetVersion(RetValue: PV8Variant; Params: PV8ParamArray;
  const ParamCount: Integer): Boolean;


или, как было сказано где-то здесь же (197), добавить этот параметр в процедуры в v8napi.pas
190. user657734_YGREEN 03.02.19 19:15 Сейчас в теме
Доброго вечера автору. Скачал Lazarus. Скачал примеры. Скомпилировал. Пробую подключить компоненту. и ничего не подключается. В чём может быть дело.
191. user1212971 27.04.19 21:44 Сейчас в теме
Друзья, можете скинуть в личку последний релиз - v8napi.pas от 16.12.2015? Потратил последние деньги на версию с ошибкой "Некорректная работа компоненты с памятью".
192. UncleVader 129 02.05.19 11:10 Сейчас в теме
(191) есть от 2013 года если поможет
писал свои компоненты на Лазарусе, все работало норм
Прикрепленные файлы:
napi_demo.zip
193. user1212971 02.05.19 12:14 Сейчас в теме
194. user657734_YGREEN 06.05.19 22:50 Сейчас в теме
Компонента на компьютере где писалась (Lazarus) нормально подключается. А при переносе не подключается...
ПодключитьВнешнююКомпоненту возвращает Ложь...
Может кто сталкивался с похожей проблемой?
195. user657734_YGREEN 10.05.19 14:15 Сейчас в теме
(194) + Зарегистрировать dll тоже не получается.Пишет модуль найден, но точка входа DLLRegisterServer не найдена.
196. slaviksoft 74 12.11.19 17:42 Сейчас в теме
Пробую подключить компоненту x64 в клиенте x64 - вілетает с дампом при вызове v8.SetEventBufferDepth(FEventBufferDepth);
8.3.16
можете помочь?
197. slaviksoft 74 21.11.19 10:25 Сейчас в теме
(196)
вілетает с дампом при вызове v8.SetEventBufferDepth(FEv


Нашел ошибку.
В процесе обновлений версий модуля автором почему-то потерялось описание var v8: TV8AddInDefBase.

нужно исправить с
_V8CP = function(Obj: TObject; paParams: PV8ParamArray;const lSizeArray: integer): boolean;

на
_V8CP = function(Obj: TObject; paParams: PV8ParamArray; const lSizeArray: integer; var v8: TV8AddInDefBase): boolean;

то же в описаниях _V8CF и _V8PGS.
Оставьте свое сообщение