Утечка памяти
От: wtch Россия  
Дата: 05.12.19 14:18
Оценка:
Снимаю данные с векторного рефлектометра серии CABAN
http://www.planarchel.ru/Products/Measurement%20instrument/r-series/

В доках пример на VC (СОМ интерфейс)
Если убрать лишнее получится
#import "C:\RVNA\RVNA.exe" no_namespace
IRVNAPtr pNWA; // Pointer to COM object of RVNA.exe
CComVariant Data; // Variable for measurement data

CoInitialize(NULL);
pNWA.CreateInstance(__uuidof(RVNA))

pNWA->SCPI->TRIGger->SEQuence->SINGle();

Data = pNWA->SCPI->CALCulate[1]->SELected->DATA->FDATa;
CComSafeArray<double> mSafeArray;
mSafeArray.Attach(Data.parray);
........................................
mSafeArray.Detach();
pNWA.Release();
CoUninitialize();

Пишу на BCB6

#include "R54Lib_TLB.h" // вместо #import "C:\RVNA\RVNA.exe"

VARIANT Data;
IRVNAPtr pNWA;
pNWA = CoRVNA::Create();
pNWA->SCPI->TRIGger->SEQuence->SINGle();

Data = pNWA->SCPI->get_CALCulate(1)->SELected->DATA->get_FDATa();

TSafeArrayT <double,VT_R8,1> mSafeArray;
mSafeArray.Attach(Data.parray);
........................................
mSafeArray.Detach();
Утечка видимо происходит на на строчке выделенной болдом

Прошу помощи.
Re: Утечка памяти
От: kov_serg Россия  
Дата: 05.12.19 16:15
Оценка:
Здравствуйте, wtch, Вы писали:

W>Снимаю данные с векторного рефлектометра серии CABAN

W>http://www.planarchel.ru/Products/Measurement%20instrument/r-series/
...
W>#include "R54Lib_TLB.h" // вместо #import "C:\RVNA\RVNA.exe"

W> VARIANT Data;

W> IRVNAPtr pNWA;
W> pNWA = CoRVNA::Create();
W> pNWA->>SCPI->TRIGger->SEQuence->SINGle();
W> Data = pNWA->SCPI->get_CALCulate(1)->SELected->DATA->get_FDATa();

W>Утечка видимо происходит на на строчке выделенной болдом


А почему Data не CComVariant ?
Re: Утечка памяти
От: Vi2 Удмуртия http://www.adem.ru
Дата: 05.12.19 16:36
Оценка:
Здравствуйте, wtch, Вы писали:

W>Прошу помощи.


VARIANT не имеет деструктора, поэтому нужно освобождать или через VariantClear, или не делать Detach() у mSafeArray.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Утечка памяти
От: wtch Россия  
Дата: 05.12.19 18:25
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, wtch, Вы писали:


W>>Снимаю данные с векторного рефлектометра серии CABAN

W>>http://www.planarchel.ru/Products/Measurement%20instrument/r-series/
_>...
W>>#include "R54Lib_TLB.h" // вместо #import "C:\RVNA\RVNA.exe"

W>> VARIANT Data;

W>> IRVNAPtr pNWA;
W>> pNWA = CoRVNA::Create();
W>> pNWA->>SCPI->TRIGger->SEQuence->SINGle();
W>> Data = pNWA->SCPI->get_CALCulate(1)->SELected->DATA->get_FDATa();

W>>Утечка видимо происходит на на строчке выделенной болдом


_>А почему Data не CComVariant ?

В шестом билдере к сожалению нет CComVariant....
Re[2]: Утечка памяти
От: wtch Россия  
Дата: 05.12.19 18:35
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, wtch, Вы писали:


W>>Прошу помощи.


Vi2>VARIANT не имеет деструктора, поэтому нужно освобождать или через VariantClear, или не делать Detach() у mSafeArray.

VariantClear не помогает... Завтра попробую без Detach(). девайс на работе.
Хотя цикл
{
Data = ...
VariantClear();
}
тоже протекал.
Re[3]: Утечка памяти
От: Vi2 Удмуртия http://www.adem.ru
Дата: 05.12.19 18:46
Оценка:
Здравствуйте, wtch, Вы писали:

W>VariantClear не помогает... Завтра попробую без Detach(). девайс на работе.

W>Хотя цикл
W>{
W>Data = ...
W>VariantClear();
W>}
W>тоже протекал.

pNWA->SCPI->TRIGger->SEQuence->SINGle(); 
CComVariant Data = pNWA->SCPI->CALCulate[1]->SELected->DATA->FDATa;

pNWA->SCPI->TRIGger->SEQuence->SINGle(); 
VARIANT Data = pNWA->SCPI->get_CALCulate(1)->SELected->DATA->get_FDATa();

Неплохо бы посмотреть, как выглядит описания метода FDATa или get_FDATa. Иногда возврат выглядит как _variant_t, тогда вариант с VARIANT просто неверен.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Отредактировано 05.12.2019 18:47 Vi2 . Предыдущая версия .
Re[3]: Утечка памяти
От: Vi2 Удмуртия http://www.adem.ru
Дата: 06.12.19 08:42
Оценка:
Здравствуйте, wtch, Вы писали:

_>А почему Data не CComVariant ?

W>В шестом билдере к сожалению нет CComVariant....

Я тут подумал, что если есть IRVNAPtr, то наверняка есть и _variant_t, который вполне мог бы заменить CComVariant.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: Утечка памяти
От: wtch Россия  
Дата: 08.12.19 09:39
Оценка:
Благодарю всех. Решение прислали из техподдержки
Re[2]: Утечка памяти
От: wtch Россия  
Дата: 08.12.19 17:21
Оценка:
void __fastcall TMainFrm::ReadData()
{
        // Create references to the COM interfaces with indices via the pointers to avoid the memory leaks.
        SCPI_SENSePtr SENSe1 = VNA->SCPI->get_SENSe(1);
        SCPI_CALCulatePtr CALCulate1 = VNA->SCPI->get_CALCulate(1);
        SCPI_CALCulate_PARameterPtr PARameter1 = CALCulate1->get_PARameter(1);

        VNA->SCPI->SYSTem->PRESet();
        SENSe1->FREQuency->STARt = 1e8; SENSe1->FREQuency->STOP = 1e9;
        SENSe1->SWEep->POINts = 21;
        PARameter1->DEFine = L"S11";
        VNA->SCPI->TRIGger->SEQuence->SINGle();

        Variant Data;
        // Get measurement data (array of complex numbers)
        CALCulate1->SELected->DATA->get_FDATa(Data);
        double RE[21] , IM[21];
        for(i = 0; i < 21;i++)
        {
          RE[i] =  (double)Data.GetElement(2 * i + 0);
          IM[i] =  (double)Data.GetElement(2 * i + 1);
        }
        Data.Clear();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.