Автор Тема: Отладка тестового плагина для Recorder  (Прочитано 901 раз)

Оффлайн Igor V

  • Новичок
  • *
  • Сообщений: 23

Добрый день!
Возникла необходимость в отладке тестового плагина из примеров (проект с названием test)
Цитировать
Для запуска plug-in`а под отладчиком IDE Borland® C++Builder™ необходимо:
1. указать полный путь и имя файла plug-in`а в файле настройки ПО
«Recorder». Файл настройки (по умолчанию) «recorder.cfg» находится в кор-
невой директории ПО «Recorder».
2. указать в IDE Borland® C++ Builder™ в параметрах запуска в качестве «Host
Application» имя (и соответственно полный путь) программы «Recorder».
Возникло 2 вопроса:
1) Указываться в качества файла плагина должен .dll файл?
2)При выполнении команды Project->Build ctest ошибка:
 [C++ Error] ctest.cpp(10): E2209 Unable to open include file 'rcplugin.h'

 Как решить данную проблему? Заранее спасибо
« Последнее редактирование: 20.02.2018, 07:05:16 от Igor V »

Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
Здравствуйте.
1. Да в качестве файла плагина должен указываться dll
Вы можете, как альтернативное решение, указать директории для сборки и промежуточной сборки каталог плагинов рекордера
{PF}/MERA/Recorder/plugins/
Для этого нужны соответствующие права пользователя
В этом случае загрузку плагинов можно сделать штатным образом.

2. Не настроены пути к заголовочным файлам PlgSDK
« Последнее редактирование: 20.02.2018, 11:23:25 от BacCM »

Оффлайн Igor V

  • Новичок
  • *
  • Сообщений: 23

Использую среду C++ Builder 6, выполнил следующие шаги:
1)В проекте тестового плагина выполнил Run->Parameters->Host Application
 C:\Program Files (x86)\Mera\Recorder\Recorder.exe2)В файле recorder.cfg добавил строчку:
[plugins]plgcounter=1
;Плагин компенсации температуры холодного спая
;plugindll[0]=plugins\plgCJC.dll
plugindll[0]=D:\work\Recorder\plugins example\C++Builder.api\test\ctest.dll
3)Поставил точки останова в функциях create() и execute()
4)Запустил Recorder в режиме просмотра
5)Запустил отладку в Builder Run(F9)
Информация о плагине отображается в рекордере, при запуске отладки не происходит останова в выбранных функциях.С чем это может быть связано? Заранее спасибо.
« Последнее редактирование: 21.02.2018, 08:37:30 от Igor V »

Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
Нужно чтобы все файлы которые создаются в процессе сборки плагина помещались в ту же папку откуда загружается плагин.
Intermediate Output, Final Output, BPL/LIB Output


Оффлайн Igor V

  • Новичок
  • *
  • Сообщений: 23
1)    [/font]При компиляции функций формы возникает предупреждение в void __fastcall TForm1::PrepareTagsView(void) :

[C++ Warning] TTestForm.cpp(86): W8030 Temporary used for parameter 'a_Value' in call to '__stdcall ITag::GetProperty(unsigned long,tagVARIANT &)'

встроке if ((*i)->GetProperty( TAGPROP_DESCRIBE, vDsc))

2)    [/font]иошибка [C++ Error] TTestForm.cpp(216): E2316 'operator tagVARIANT *()' is not a member of 'Variant'

в AnsiString __fastcall TForm1::GetDataThroughAOD( ITag * pTag)

встроке if ((pTag != 0) && (pTag->GetProperty(TAGPROP_ESTIMATE, *vData.operator VARIANT *())))
 

Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
Предлагаю вместо Variant использовать CComVariant

Код: ("C++") [Выделить]

#include <vcl.h>

#pragma hdrstop

#include <malloc.h>

#include "TestFormUnit.h"

/// Добавить лучше именно тут
#include <atl/atlbase.h>

/// . . .

        CComVariant vDsc;
        if ((*i)->GetProperty( TAGPROP_DESCRIBE, vDsc))
            pil->SubItems->Add(AnsiString(vDsc.bstrVal));

Оффлайн Igor V

  • Новичок
  • *
  • Сообщений: 23

Добрый день! В процессе работы с функциями формы возникли трудности, а именно: в ListView не отображается SubItem, в котором должно быть описание тега. Предварительных настроек форматирования ListView не делал. В чем может быть проблема?void __fastcall TTestForm::PrepareTagsView(void)
{
TagsListView->Items->Clear();
tagslist::iterator i = FTags.begin();
for (; i != FTags.end(); i ++)
{
TListItem* pil =TagsListView->Items->Add();
pil->Caption = (*i)->GetName();
CComVariant vDsc;
if ((*i)->GetProperty( TAGPROP_DESCRIBE, vDsc))
        pil->SubItems->Add(AnsiString(vDsc.bstrVal));
else
        pil->SubItems->Add("");
        pil->SubItems->Add("");
pil->SubItems->Add("");
}
}

Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
А что именно происходит?
Под отладкой свойство смотрели они вычитывается?
Я попробовал, вот так выглядит окно:


Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
Так из под отладки:

Оффлайн Igor V

  • Новичок
  • *
  • Сообщений: 23
Свойство описания тега вычитывается под отладкой и даже выводится, например в ListBox. Но в ListView его не видно, одно только название тега.

Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
Re: Отладка тестового плагина для Recorder
« Ответ #10 : 02.04.2018, 20:29:18 »
Как настроен ListView? Должно быть стиль Report или как-то так

Оффлайн Igor V

  • Новичок
  • *
  • Сообщений: 23
Re: Отладка тестового плагина для Recorder
« Ответ #11 : 28.06.2018, 09:08:30 »
 Решил немного расширить тестовый пример, путем создания виртуального тега, чтобы он отображался в форме:
сама функция создания:
void __fastcall TPluginForm::CreateTag() {
 BeginConfigure();
 ITag *testTag=FRecorder->CreateTag("testTag",LS_VIRTUAL,0);
 FTags.push_back(testTag);
 EndConfigure();
 }место вызова
//IRecorderPlugin:
bool STDMETHODCALLTYPE TPlugin::create(IRecorder* a_pOwner)
{
   FPluginForm = new TPluginForm( a_pOwner);
   FPluginForm->CreateTag();
   return true;
}
При запуске появляется ошибка: "Abnormal program termination", видно что тег успел появиться в форме. Интересует корректное создание тега и его отображение в форме и в главном окне Recordera. Есть ли примеры подобных вещей на С++ или что в существующем можно исправить?

Онлайн BacCM

  • moderator
  • *****
  • Сообщений: 61
Re: Отладка тестового плагина для Recorder
« Ответ #12 : 28.06.2018, 11:30:23 »
Можно попробовать убрать  вызовы BeginConfigure и  EndConfigure в create плагина они не нужны.В качестве примера могу предложить плагин поддержки звукового канала.

Онлайн Ярослав2

  • Новичок
  • *
  • Сообщений: 31
Re: Отладка тестового плагина для Recorder
« Ответ #13 : 28.06.2018, 18:23:08 »

Так будет работать


res=FRecorder->EnterConfigMode((IUnknown*)GPlugin, 0);
MyTag[7]=FRecorder->CreateTag( n,LS_VIRTUAL,NULL);
MyTag[7]->CfgWritable(true);   //
res=FRecorder->LeaveConfigMode((IUnknown*)GPlugin, 0);

И еще, проверяйте данные которые будете записывать в виртуальный таг. Не рекомендую записывать бесконечности.
« Последнее редактирование: 28.06.2018, 18:33:56 от Ярослав2 »