Автор Тема: Из pugin'а на С++Builder не создается тег.  (Прочитано 2427 раз)

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

  • Новичок
  • *
  • Сообщений: 36
Здравствуйте!


При создании тега из программы на C++ возникает ошибка в ПО recorder. Система не переходит в режим конфигурирования код возврата 0. Подскажите в чем причина. Код программы:



unsigned long res;
const char *n="m123";

strcpy(s,   Edit3->Text.c_str());
strcpy(s1,   Edit3->Text.c_str());


res=FRecorder->EnterConfigMode((IUnknown*)GPlugin, 0);
MyTag[1]=FRecorder->CreateTag( n,LS_VIRTUAL,s);
MyTag[1]->SetFreq(101);
res=FRecorder->LeaveConfigMode((IUnknown*)GPlugin, 0);

Оффлайн BacCM

  • moderator
  • *****
  • Сообщений: 69
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #1 : 05.09.2016, 18:02:29 »
Здравствуйте,
функция EnterConfigModeвозвращает код HRESULT
0
соответствует константе S_OK т.е. успешное выполнение.


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

  • Новичок
  • *
  • Сообщений: 36
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #2 : 05.09.2016, 19:53:24 »
Тогда выходит в команде

MyTag[1]=FRecorder->CreateTag( n,LS_VIRTUAL,s);

ошибка?
plugin выкидывает окно с текстом "Access violation at address 0330A405 in module 'rc_core.dll'. read of address 74696445.
Подскажите как правильно тег сделать.

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

  • Новичок
  • *
  • Сообщений: 36
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #3 : 05.09.2016, 20:07:07 »
исправил ошибку. тег создался при таком вызове


MyTag[0]=FRecorder->CreateTag( n,LS_VIRTUAL,NULL);

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

  • Новичок
  • *
  • Сообщений: 36
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #4 : 10.09.2016, 08:34:44 »
Еще вопрос по параметрам программы recorder.
Есть ли возможность из plugin'а прочитать и записать параметры
испытание
изделие.
Если есть то как.


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

Оффлайн BacCM

  • moderator
  • *****
  • Сообщений: 69
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #5 : 12.09.2016, 14:17:09 »
Получение информации:

Код: ("cpp") [Выделить]
    zstring zsTemp;
    int len = zsTemp.capacity() - 1;
    if(m_pRecorderLink->GetEnvironmentString("\\Recorder\\Config\\Испытание", zsTemp, &len)) {
        m_strTestName = zsTemp;
    }
    if(m_pRecorderLink->GetEnvironmentString("\\Recorder\\Config\\Изделие", zsTemp, &len)) {
        m_strProductName = zsTemp;
    }

Что имеете ввиду под переменными среды?

Оффлайн BacCM

  • moderator
  • *****
  • Сообщений: 69
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #6 : 12.09.2016, 14:21:54 »
исправил ошибку. тег создался при таком вызове

MyTag[0]=FRecorder->CreateTag( n,LS_VIRTUAL,NULL);

Действительно, ошибка была в последнем параметре вызова CreateTag. Для виртуальных каналов там можно передать ссылку на владельца  в виде ссылки на IRecorderPlugin. Это не обязательно.

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

  • Новичок
  • *
  • Сообщений: 36
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #7 : 12.09.2016, 16:44:27 »
Спасибо за пример
"zstring zsTemp;    int len = zsTemp.capacity() - 1;    if(m_pRecorderLink->GetEnvironmentString("\\Recorder\\Config\\Испытание", zsTemp, &len)) {        m_strTestName = zsTemp;    }    if(m_pRecorderLink->GetEnvironmentString("\\Recorder\\Config\\Изделие", zsTemp, &len)) {        m_strProductName = zsTemp;    }"
Как раз и по переменным среды "\\Recorder\\Config\\Испытание" - (GetEnvironmentString) пояснили.
А перечень их где - то  можно увидеть? Есть ли  ограничения по моменту их изменения?

Оффлайн BacCM

  • moderator
  • *****
  • Сообщений: 69
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #8 : 23.09.2016, 16:12:55 »
Переменные среды в Recorder. Данный механизм не получил развития, и почти не используется. Некоторые плагины используют его для общения между собой.
Поэтому, списка как такого нет. Обращаться к переменным можно в произвольный момент работы.

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

  • Новичок
  • *
  • Сообщений: 36
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #9 : 23.10.2016, 17:44:52 »
Подскажите какой примерно объем стека доступен для плагинов.
При создании глобальных переменных в плагине начинаются проблемы при вызове компонентов связанных с экспортом в EXCEL. Подозреваю, что что- то не так делаю с организацией работы с память или стеком.

Оффлайн BacCM

  • moderator
  • *****
  • Сообщений: 69
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #10 : 24.10.2016, 12:23:11 »
Глобальные переменные не должны иметь связь с размером стека.
Некоторые потоки в рекордере создаются с размером стека 16к

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

  • Новичок
  • *
  • Сообщений: 36
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #11 : 14.11.2016, 21:09:12 »
Подскажите с каким приоритетом создаются потоки плагинов в рекордере, можно ли управлять этими приоритетами? Может ли графическая форма плагина "тормозить" регистрацию данных в рекордере?

Оффлайн BacCM

  • moderator
  • *****
  • Сообщений: 69
Re: Из pugin'а на С++Builder не создается тег.
« Ответ #12 : 15.11.2016, 15:46:55 »
Для плагинов не создаются отдельные потоки. Они все запускаются в отдельном общем потоке, со стандартным приоритетом. Получение данных от устройств происходит в отдельных потоках, которые создаются драйверами этих устройств, приоритеты тут могут устанавливаться самим драйвером.
Плагин может при необходимости создать собственный поток.