НПП "Мера"

Программное обеспечение НПП "Мера" => Обсуждение ПО Recorder, MR-300, WinПОС, ДФМ => Тема начата: trudonoshin от 29.09.2016, 09:52:58

Название: plugin к recorder
Отправлено: trudonoshin от 29.09.2016, 09:52:58
Необходимо создать plugin для Recorder на Delphi. Для начала решил повторить пример test2 из документации. DLL собрался успешно и подключился. Но как к нему обратиться? Форм, которы е есть в этом примере нигде не видно.
Название: Re: plugin к recorder
Отправлено: BacCM от 29.09.2016, 10:32:51
Приветствую Вас на нашем форуме.
Форма открывается как отдельное окно не привязанное к окну Рекордер.



Название: Re: plugin к recorder
Отправлено: trudonoshin от 29.09.2016, 10:45:17
Дело в том, что окно нигде не появляется.
Название: Re: plugin к recorder
Отправлено: trudonoshin от 29.09.2016, 10:49:37
Последовательность действий правильна?
1. Из рекордера подключаем DLL
2. Сохраняем конфигурацию
3. Перезапускаем рекордер.
Название: Re: plugin к recorder
Отправлено: BacCM от 29.09.2016, 11:26:57
I Вариант с постоянной загрузкой

1. Запускаете Рекордер
2. Настройки -> Плагины -> Кнопка с желтой звездочкой
3. Добавить
4. Выбираете свой плагин, Ok
5. Выходите из Рекордера, можно без сохранения конфигурации, т.к. плагины не входят в состав общих настроек
6. Запускаете Рекордер

II Вариант с одноразовым запуском
1. Запускаете Рекордер
2. Настройки -> Плагины -> Кнопка с плюсом
3. Выбираете свой плагин, Загрузить
4. Закрывает окно настройки по Ok
5. НЕ выходите из Рекордера
6. Плагин загружен до выхода из Рекордер, на текущую сессию
Название: Re: plugin к recorder
Отправлено: trudonoshin от 29.09.2016, 11:44:57
То есть все было сделано правильно, но окно не появляется.
Название: Re: plugin к recorder
Отправлено: BacCM от 29.09.2016, 12:13:06
Вы использовали первый вариант?
Тогда после перезапуска запуска Recorder посмотрите есть ли у вас загруженный плагин в списке запущенных
Название: Re: plugin к recorder
Отправлено: trudonoshin от 29.09.2016, 12:17:25
Пробовали и первый и второй варианты. В списке есть.
Название: Re: plugin к recorder
Отправлено: BacCM от 29.09.2016, 12:24:26
Попробуйте загрузить исходную dll

Если у вас ее нет:
https://www.dropbox.com/s/3poxa9j5e05zedu/test2.dll?dl=0
Название: Re: plugin к recorder
Отправлено: trudonoshin от 06.10.2016, 10:41:50
Ваша DLL подключилась и сразу появилось окно, после этого подключилась и та, которая не была видна.
Спасибо.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 09.10.2016, 17:32:50
А после выхода из рекордера который запускал плагин написанный на Дельфи ошибка всегда возникает?
Название: Re: plugin к recorder
Отправлено: BacCM от 10.10.2016, 09:55:30
Не всегда, только если в плагине что-то не так.
Важно чтобы по завершению работы плагин освободил все системные ресурсы: окна, объекты синхронизации, ссылки на связанные COM объекты и прочее.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 10.10.2016, 17:32:06
А в примере который доступен для дельфи, что еще надо освободить, что бы ошибки не возникало?
Название: Re: plugin к recorder
Отправлено: BacCM от 10.10.2016, 17:53:49
Какой именно пример?
Их несколько. Например, те которые создают формы их не уничтожают при закрытии.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 10.10.2016, 19:22:38
Пример test2
А разве код который в примере не удаляет созданную форму?

destructor TTestPlugin.Destroy;
begin
  FreeAndNil( FTestForm);
end;
Название: Re: plugin к recorder
Отправлено: BacCM от 11.10.2016, 14:56:05
Действительно код в примере должен удалять форму.
Тем не менее, если убрать из примера функции создания формы, а так же обращения к ней, падения на выходе прекращаются.
Название: Re: plugin к recorder
Отправлено: BacCM от 11.10.2016, 15:05:06
В моем примере помог перенос кода удаления формы в метод close плагина

// Завершить работу плагина
function TTestPlugin.Close:  boolean; stdcall;
begin
   FreeAndNil(FTestForm);
   Result:= true;
end;
Название: Re: plugin к recorder
Отправлено: trudonoshin от 13.10.2016, 20:04:55
Запустил recorder на ком-е, не подключенном к оборудованию. Хотел на нем отладить plugin  на виртуальных тегах.
Но  у recorder-а неактивна кнопка "загрузить" (для  plugin).
Название: Re: plugin к recorder
Отправлено: BacCM от 14.10.2016, 11:58:48
Запустил recorder на ком-е, не подключенном к оборудованию. Хотел на нем отладить plugin  на виртуальных тегах.
Но  у recorder-а неактивна кнопка "загрузить" (для  plugin).

Подозреваю, что для разблокировки вышеуказанной кнопки необходимо выбрать плагин из списка.
Название: Re: plugin к recorder
Отправлено: trudonoshin от 14.10.2016, 12:41:32
Виноват, думал по кнопке будет выбор директории из которой загрузится DLL.
Получил все тестовые DLL, они работают, кроме того, который предназначен для генерации виртуальных тегов. При его загрузке recorder падает без всяких сообщений.
Название: Re: plugin к recorder
Отправлено: BacCM от 14.10.2016, 17:13:05
Получил все тестовые DLL, они работают, кроме того, который предназначен для генерации виртуальных тегов. При его загрузке recorder падает без всяких сообщений.
Посмотрю на следующей неделе
Название: Re: plugin к recorder
Отправлено: trudonoshin от 17.10.2016, 12:14:57
Новая версия recorder не падает, но и ничего не показывает после загрузки plugin-а   для генерации виртуальных тегов.
Название: Re: plugin к recorder
Отправлено: BacCM от 17.10.2016, 14:30:28
Новая версия recorder не падает, но и ничего не показывает после загрузки plugin-а   для генерации виртуальных тегов.

В каком смысле ничего не показывает?
Я её собрал почти ничего не модифицируя.
Чтобы собралось пришлось добавить в   

uses
...
device in '..\interfaces\device.pas',
...

И последний параметр в вызове функции

pointer(FTag):= FIRecorder.CreateTag( PChar(VT_Name), LS_VIRTUAL, 0);

В результате работы создается канал "v_plg_tag" и в него кладутся данные.
Название: Re: plugin к recorder
Отправлено: trudonoshin от 17.10.2016, 15:29:51
Модуля device.pas  нет.
Строка pointer(FTag):= FIRecorder.CreateTag( PChar(VT_Name), LS_VIRTUAL, 0); при трансляции выдает ошибку
[Error] PluginClass.pas(171): Constant object cannot be passed as var parameter.
А не показывает - просто нет никаких результатов от запуска plugin'а.
Название: Re: plugin к recorder
Отправлено: BacCM от 17.10.2016, 15:58:15
Какая Дельфи используется?
Пришлите ваш вариант плагина.
Название: Re: plugin к recorder
Отправлено: trudonoshin от 17.10.2016, 16:06:38
Delphi7
Plugin взят с вашего сайта ( Главная (http://www.nppmera.ru/) → Продукция и услуги (http://www.nppmera.ru/catalog) → Recorder (http://www.nppmera.ru/recorder) → Загрузка ПО и документации) Recorder. Примеры плагинов с исходным кодом
Название: Re: plugin к recorder
Отправлено: BacCM от 17.10.2016, 17:24:52
У меня чуть более свежая версия файла
Название: Re: plugin к recorder
Отправлено: trudonoshin от 18.10.2016, 09:28:39
Все заработало, спасибо.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 23.10.2016, 17:40:06
Подскажите как сохранить созданные виртуальные переменные. При перезапуске программы recorder они исчезают.
Название: Re: plugin к recorder
Отправлено: BacCM от 24.10.2016, 12:26:00
ITag::CfgWritable()
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 24.10.2016, 17:09:10
Переменная сохранилась, но данные которые поступают из нее (заполнял через плагин расчетные параметры) не поступают в мой плагин хотя отображаются в рекордере. И еще адрес переменной virtual , а для переменных сделанных через расчетный плагин v:VTags, так и должно быть?
Название: Re: plugin к recorder
Отправлено: BacCM от 24.10.2016, 17:17:30
С адресом, скорее всего всё так и должно быть. За него отвечает источник данных, и для аппаратных каналов он уникален, а плагины вольны делать его любым для своих каналов. По умолчанию "virtual".

То, что данные не поступают в ваш плагин.  Так не должно быть.
Как вы их пытаетесь получать?
Как подключаетесь к нужному каналу после загрузки конфигурации?
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 24.10.2016, 18:37:50
Использую программу на базе вашего примера test_viw. Остальные каналы показывает нормально по созданному как будто данные просто не поступают.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 24.10.2016, 18:53:53
Подскажите с какой максимальной частотой можно писать из плагина, в виртуальную переменную, что бы пе происходило переполнение приемного буфера?
Название: Re: plugin к recorder
Отправлено: BacCM от 25.10.2016, 10:23:52
Подскажите с какой максимальной частотой можно писать из плагина, в виртуальную переменную, что бы пе происходило переполнение приемного буфера?

Для начал дам некоторые разъяснения о том какие каналы бывают и соответственно методы отправки в них данных.
Каналы (теги) бывают векторными и скалярными (кроме этого входными, выходными, иррегулярными, трубками.. но это пока не важно)
У векторного канала есть заданная частота дискретизации, которую задает источник данных. Так же определяется размер блока данных в отсчетах. В итоге, данные хранятся в циклических буферах разбитых на фиксированного размера блоки. Самый оптимальный способ отправки данных в такой канал метод PushPata(Ex), где на источник данных (разработчика в случае плагина) ложится ответственность за правильны размер блока, тип данных и своевременную их отправку. Второй способ это метод PushValue в данном случае рекордер сам производит буферизацию и преобразование данных, что серьезно увеличивает накладные расходы. Формального ограничения по частоте дискретизации для данных каналов нет. Они ничем не отличаются от аппаратных. До сотен килогерц.

Скалярный канал, это канал который единовременно хранит только одно значение и штамп времени когда это значение было передано. Частота дискретизации данных устанавливается равной 0.
Правильный способ отправки данных это PushValue.

Для векторных каналов рекордер производит контроль целостности и непрерывности потока. Т.е. время следующего блока должно совпадать с концом предыдущего, и периодичность поступления данных должна быть достаточно равномерной.
Для скалярных каналов никакого контроля не производится.
Название: Re: plugin к recorder
Отправлено: BacCM от 25.10.2016, 10:39:12
Использую программу на базе вашего примера test_viw. Остальные каналы показывает нормально по созданному как будто данные просто не поступают.

Тут проще всего посмотреть под отладкой в методе GetDataThroughVector формы, что именно там не так.
Или, так как данные всё равно получаются по таймеру, и берутся как скалярные оценки использовать метод тега
ITag::GetScalarEstimate[Ex] или ITag::GetEstimate чтобы не заморачиваться с индексами и буферами.
IBlockAccess нужен для непрерывного получения полного потока данных, в примере же берется просто одно последнее значение. Т.к. это просто пример. Код будет проще и ближе к сути процесса.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 25.10.2016, 19:09:40
Для векторных каналов рекордер производит контроль целостности и непрерывности потока. Т.е. время следующего блока должно совпадать с концом предыдущего, и периодичность поступления данных должна быть достаточно равномерной.
Для скалярных каналов никакого контроля не производится.
То есть, для скалярного канала,  возможна  ситуация когда некоторые данные передаваемые с интервалом 10 мС будут зарегистрированы в одинаковый момент времени, а при интервале 20 мС данные будут регистрироваться равномерно в разные моменты времени?
Название: Re: plugin к recorder
Отправлено: BacCM от 25.10.2016, 19:21:17
Скалярный канал это по сути именованная пара (time, value). Время присваивается то которое дает источник, либо при его отсутствии текущее время Recorder. В таком же формате данные и регистрируются. В момент прихода.
Поэтому для скалярных каналов об интервале говорить можно только применительно конкретных ситуаций. Бывает скалярные каналы в которые данные поступают регулярно, они по сути векторные но маскируются под скалярные.
А бывают скалярные, такие в которые данные попадают несколько раз за эксперимент.
Поэтому рекордер и не контролирует их своевременный приход.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 25.10.2016, 19:40:15
При ситуации когда в рекорер надо выдавать данные поступающие с последовательного интерфейса (RS-422) с не постоянным интервалом от 5 до 15 мС, при скалярной выгрузке, какой интервал будет минимально допустимым, чтобы информация регистрировалась не в одинаковый интервал времени?
Название: Re: plugin к recorder
Отправлено: BacCM от 26.10.2016, 10:32:10
При ситуации когда в рекорер надо выдавать данные поступающие с последовательного интерфейса (RS-422) с не постоянным интервалом от 5 до 15 мС, при скалярной выгрузке, какой интервал будет минимально допустимым, чтобы информация регистрировалась не в одинаковый интервал времени?

Вы можете сами передавать в Рекордер время ITag::PushValue(значение, >время<) и будет регистрироваться именно с этим временем. У Вас будет полный контроль за процессом.
Название: Re: plugin к recorder
Отправлено: trudonoshin от 30.11.2016, 12:31:37
После перехода на версию 3.3 перестали работать plugin-ы и тот, который в примерах и сделанный на его основе. Подскажите, пожалуйста, в чем дело?
Название: Re: plugin к recorder
Отправлено: BacCM от 30.11.2016, 18:18:22
При переходе с какой версии?
Название: Re: plugin к recorder
Отправлено: trudonoshin от 01.12.2016, 11:34:46
Точно не знаю, ставили бериевцы, но предположительно 3.2
Название: Re: plugin к recorder
Отправлено: BacCM от 01.12.2016, 18:23:39
Что именно не работает?
Версии 3.2 и 3.3 не должны сильно различаться в части взаимодействия с плагинами. В моей 3.3 все плагины из примеров работают

Название: Re: plugin к recorder
Отправлено: trudonoshin от 02.12.2016, 18:59:20
повисает во время изменения конфигурации
Название: Re: plugin к recorder
Отправлено: BacCM от 05.12.2016, 11:40:58
Проверил на плагинах из примеров. Всё работает.
Попробуйте dll которые в примерах.
Могу обновить технологическую версию рекордера на сайте, чтобы у нас всё совпадало. Может действительно есть какая-то разница.
UPD: Действительно с некоторого момента в ветке 3.3 появился контроль исключений. Посмотрите в журнале событий нет ли информации о предотвращенных падениях.
Название: Re: plugin к recorder
Отправлено: trudonoshin от 07.12.2016, 17:33:15
Все исправилось переустановкой на версию 3.3.0.38.
Спасибо.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 13.12.2016, 16:45:38
Подскажите, пожалуйста, возможно ли управление из плагина включением / отключением регистрации по отдельному каналу, при сохранении регистрации по остальным каналам? Если возможно то как.
Название: Re: plugin к recorder
Отправлено: BacCM от 13.12.2016, 16:52:00
Да возможно, для этого надо вынести требуемые каналы в группу. Для неё есть возможность выбрать отдельный каталог для регистрации и произвольное время регистрации
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 15.12.2016, 19:25:07
Подскажите, какой максимальный размер файла регистрации для программы рекордер?
Будет ли 64 битная версия программы рекордер?

Возможно ли воспроизведение записанных ранее рекордером данных, если да то каким образом?
 
Название: Re: plugin к recorder
Отправлено: BacCM от 16.12.2016, 12:20:37
Формат регистрации данных предполагает запись данных для каждого канала в свой файл. Размеры файлов ограничены файловой системой и 32 битностью программы регистрации.
Даже при ограничении в 4ГБ на файл, например при частоте опроса 8000Гц запись может продолжаться трое суток.
При этом с обработкой такого объема данных будут сопряжены некоторые неудобства. Лучше нарезать данные более короткими интервалами.

64 битная версия в очень далеких планах, к сожалению.

Да воспроизведение возможно. Есть плагины к Recorder позволяющие это сделать. Так же в WinПОС существует функция автоматического проигрывания сигнала.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 06.02.2017, 19:03:55
Подскажите, возможно ли  с помощью команды PushValue сохранение в виртуальный канал данных отличных от формата double, например в формате float или int, в специфичный момент времени?
И еще вопрос. Существуют ли плагины для получения данных в программу рекордер, от модулей производства L-Card?
Название: Re: plugin к recorder
Отправлено: BacCM от 07.02.2017, 09:59:33
PushValue принмает на вход только double, а затем преобразовывает значение к типу канала.

Насколько знаю некоторые заказчики делали подобные плагины самостоятельно, у нас ничего подобного нет.
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 23.03.2017, 16:03:24
Начал работать из плагина с базой данных формата  - .mdb. С помощью компонентов ADO билдера. При запуске из под отладчика проблем нет. А при прямом запуске рекордера появляется примерно такое сообщение - "файл kvd05.mdb используется предыдущей версией и будет перенесен в папку C:\Mera Files\Recorder. Вы можете сохранить данные. Продолжить? Да/Нет." Подскажите когда, при запуске программы recorder, может возникать подобная ситуация?
Название: Re: plugin к recorder
Отправлено: BacCM от 31.03.2017, 11:20:06
Когда этот файл лежит в каталоге \Program Files\Mera\Recorder\
Что на самом деле достаточно плохо, т.к. данные по идеологии Microsoft там лежать не должны и система на свое усмотрение может их подменять в зависимости от пользователя. Т.е. из екплорера там будет виден один файл, из какой-то программы совсем другой, под учетной записью администратора третий.

Recorder до WinXP хранил настройки и некоторые рабочие файлы рядом с собой в Progam Files, теперь все эти файлы располагаются в Mera Files на системном разделе. Для удобства перехода со старых версий, при запуске проверяется наличие нештатных файлов в каталоге исполняемых файлов и осуществляется их перенос в Mera Files.

Поэтому просто перенесите свою базу в другое место, например в папки Mera Files или User.


Название: Re: plugin к recorder
Отправлено: Ярослав2 от 12.04.2017, 18:43:22
Возникла потребность в усреднении показаний датчика в рекордере на интервале 2х секунд. Частота опроса - 100 ГЦ. В настройке канала на вкладке дополнительно, установили длину порции 200, коэф. усреднения 1. Получаемые данные вызывают сомнения. Подскажите, как конкретно вычисляются выдаваемые значения? Если можно с каким-то простым примером. Как действуем программа если одновременно выбраны несколько вычисляемых оценок?
Название: Re: plugin к recorder
Отправлено: BacCM от 13.04.2017, 12:32:07
А что именно вызывает сомнения?
Вычисления производятся в скользящем режиме с перекрытием:

Название: Re: plugin к recorder
Отправлено: Ярослав2 от 13.04.2017, 19:15:01
Допустим на вход платы поступает последовательно увеличивающееся напряжение вида: 1,2,3,4,5,6,7,8,9,10.... установлена длина порции 2. В рекордере должно регистрироваться 1.5,2.5,3.5,4.5....? варианта 2.222 быть не должно?
Название: Re: plugin к recorder
Отправлено: BacCM от 14.04.2017, 10:54:27
В описанном варианте не должно, но, это некий "сферический конь в вакууме"  упрощенный синтетический тест.
В рекордер среднее как и любая оценка считается с перекрытием на период обновления данных, который может не совпадать с периодом расчета оценки, и не выровнен с ней по началу.

Пришлите кусочек записи реальных данных, тогда можно будет посмотреть что получили и что ожидали
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 19.04.2017, 18:37:35
На записи не видно данных поступающих на вход канала. Я пробовал такой вариант.
С помощью плагина "ПО расчетные параметры" формировал в виртуальный канал поток данных вида "{Freq}={Freq}+1".
Из своего плагина смотрел полученные данные в режима длина порции 1 и 2. В первом случае шел примерный ряд "1,1,2,3,4,5,5,6..." - все нормально. Во втором должен был идти "1,1,1.5,2.5,3.5...", но появлялись числа типа 1,22 - поэтому и возник вопрос насчет формул.
Название: Re: plugin к recorder
Отправлено: BacCM от 24.04.2017, 12:54:27
Да действительно что-то подобное происходит.
Будем разбираться.
Название: Re: plugin к recorder
Отправлено: BacCM от 24.04.2017, 13:46:42
На записи не видно данных поступающих на вход канала. Я пробовал такой вариант.
С помощью плагина "ПО расчетные параметры" формировал в виртуальный канал поток данных вида "{Freq}={Freq}+1".
Из своего плагина смотрел полученные данные в режима длина порции 1 и 2. В первом случае шел примерный ряд "1,1,2,3,4,5,5,6..." - все нормально. Во втором должен был идти "1,1,1.5,2.5,3.5...", но появлялись числа типа 1,22 - поэтому и возник вопрос насчет формул.

Если запишете и посмотрите на сигнал {Freq} то увидите тоже самое.
Дело в том, что когда вы берете получаете значение {Freq} оно тоже усредненное т.е
; {Freq} == 0
{Freq} = 0 + 1  ;   {Freq} <= 1
{Freq} = {Freq} + 1  ;  {Freq} <=2 но уже есть 2 значения и {Freq} == 1.5
{Freq} = {Freq} + 1  ;  {Freq} <=2.5 , усредняется и {Freq} == 2.25


Скрипт надо сделать примерно такого вида:
{Counter} = {Counter} + 1
{Freq} = {Counter}

Канал Counter усреднение 1
Freq усреднение 2 или какое нужно для тестов тогда всё будет работать как ожидается


Название: Re: plugin к recorder
Отправлено: Ярослав2 от 14.07.2017, 06:16:17
При записи расчетного параметра в виртуальный канал у нас возникало переполнение  диапазона представления чисел. Если такие данные пытались записать, Recorder полностью выпадал с потерей данных. Cделали проверку перед записью, теперь все отлично, то может добавить такую проверку в сам recorder для повышения надежности работы ПО?
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 30.11.2017, 15:28:23
Здравствуйте!

У нас возникла проблема при включении режима записи в кодах АЦП. Режим не включается в ответ идет код ошибки 0x80040005. Другие режимы включаются нормально.
например изменение каталога (
FRecorder->EnterConfigMode( (IUnknown*)GPlugin, 0);
FRecorder->SetProperty(RCPROP_DATAFOLDER, (VARIANT) str1);
FRecorder->LeaveConfigMode( (IUnknown*)GPlugin, 0);) или предпросмотра RCPROP_PREVIEW_ENABLED.

Есть ли какая то особенность включения режима RCPROP_WRITE_CODES?

Название: Re: plugin к recorder
Отправлено: BacCM от 11.12.2017, 19:42:21
Режим записи в кодах является специальным режимом. Он не доступен для изменения в процессе работы. Для свойства доступен только метод GetProperty.

Что указано в описании
режим записи в кодах устройства для экономии места [out] VT_BOOL {v: 3.0.4.65, 3.0.5.2}

Так же хочу отметить немного странно выглядящий код установки каталога для записи:


FRecorder->SetProperty(RCPROP_DATAFOLDER, (VARIANT) str1);


Какой тип имеет переменная str1 ?
Название: Re: plugin к recorder
Отправлено: Ярослав2 от 12.12.2017, 16:01:20


Вот так примерно.


static VARIANT str1;
[size=78%]static wchar_t w[100];[/size]


Edit2->Text.WideChar(w,100);    // //
_wcspcpy(str1.bstrVal,w);
Название: Re: plugin к recorder
Отправлено: BacCM от 12.12.2017, 16:15:37
Работа с BSTR предполагает выделение памяти под строку через SysAllocString и соответсвующее освобождение.
В таком варианте как у вас написан, вы копируете строку в неизвестную область
Кроме того VARIANT у вас не проинициализирован. Что вожет привести к возникновению разного рода ошибок, и возможно привести к неработоспособности плагина в более новых версиях рекордер.

Рекомендуем не использовать без необходимости VARIANT в "чистом виде", а применять CComVariant (ATL) либо Variant (BCB) или какой-то аналог (QVariant, TVariant ...  в зависимости от библиотек и используемого фреймворка / среды разработки)