VariantClear () выдает исключение при вызове на ВАРИАНТЕ, содержащем SAFEARRAY

Я пытаюсь обернуть некоторые данные из массива БАЙТОВ в ВАРИАНТ, но я, может казаться, не освобождаю данные:

Когда я выполняю этот код...

SAFEARRAY * NewSArray;

SAFEARRAYBOUND aDim[1]; // a one dimensional array
aDim[0].lLbound = 0; //Sets the index to start from 0

//Sets the number of elements (bytes) that will go into the SAFEARRAY
aDim[0].cElements = pBuffer->GetSize();

NewSArray = SafeArrayCreate(VT_UI1, 1, aDim); // create a 1D SafeArray of BYTES

//Put the data from the man view into the SAFEARRAY
NewSArray->pvData = pBuffer->GetBuffer();

//FP Spread expects the spreadsheet data in the form of a VARIANT so we must pack the data from the SAFEARRAY into a
//VARIANT
VARIANT SpreadsheetBuffer;
VariantInit(&SpreadsheetBuffer);

SpreadsheetBuffer.vt= VT_ARRAY | VT_UI1; // set type to an array of bytes
SpreadsheetBuffer.parray= NewSArray;

try
{
    VariantClear(&SpreadsheetBuffer);
}
catch (char *str)
{
    AfxMessageBox(str);
}

Я получаю это сообщение: "Исключение Unhandeled в... в... 0xC015000F: деактивируемый контекст активации не является последний раз активированным".

Это сообщение dosen't открывается в моем AfxMessageBox между прочим. Это, кажется, имеет некоторое отношение к различному типу, потому что, если я не устанавливаю его, я не получаю исключение. Данными в pBuffer является просто Массив байтов, который был ранее вытащен SAFEARRAY.

кто-либо знает то, что я делаю неправильно?

спасибо

1
задан rob 16 July 2010 в 20:27
поделиться

1 ответ

SafeArrayCreate создает безопасный массив и выделяет память для элемента pvData . После этого не следует сбрасывать член pvData . Вы должны скопировать данные из pBuffer в то, на что указывает pvData , или использовать функции SafeArrayAccessData или SafeArrayPutElement .

2
ответ дан 2 September 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: