Как я могу освободить память C++ Safearray в C#
Мне нужно передать данные из C++ DLL в среду C#. Поэтому я использую 2d SafeArray двойников.
Эта функция передает данные из C++ в C#:
void GetIndividualExposures(SAFEARRAY*& data)
{
SAFEARRAYBOUND bounds[2];
bounds[0].lLbound = 0;
bounds[0].cElements = 10;
bounds[1].lLbound = 0;
bounds[1].cElements = 20;
long l_dimensions[2];
int index = 0;
data = SafeArrayCreate(VT_R8, 2, bounds);
double **pVals;
HRESULT hr = SafeArrayAccessData(data, (void**)&pVals);
if (SUCCEEDED(hr))
{
for (ULONG i = 0; i < bounds[0].cElements; i++)
{
for (ULONG j = 0; j < bounds[1].cElements; j++)
{
l_dimensions[0] = i;
l_dimensions[1] = j;
SafeArrayPutElement(data, l_dimensions, &data_source[i][j]);
}
}
SafeArrayUnaccessData(data);
}
}
Это работает, хорошо, все данные доступны по мере необходимости в моей среде C#. Однако я получаю утечку памяти. Я попытался использовать вторую функцию C++, чтобы освободить память:
void DeallocateExternal(SAFEARRAY*& data)
{
SafeArrayDestroy(data);
data = NULL;
}
но это не имеет никакого эффекта. Что я сделал не так? Есть ли возможность освободить память SafeArray после использования в C#? Или как я могу это сделать?