Re: ошибка DISP_E_ARRAYISLOCKED в AddPolyline()
От: Vi2 Удмуртия http://www.adem.ru
Дата: 29.07.05 08:17
Оценка: 2 (1)
Здравствуйте, Hedge, Вы писали:

H>Автоматизация PowerPoint, при попытке выполнить

H>pSlide->Shapes->AddPolyline( vcoords );

H>где vcoords — VARIANT в котором содержится SafeArray
H>Функция raw_AddPolyline возвращает код ошибки DISP_E_ARRAYISLOCKED

Судя по представленному коду, такая ошибка невозможна и скорее всего является наведенной из-за других условий и сбоев.
Возможные ошибочные действия в том, что создается VARIANT и массив в нем с рассогласованием типов данных в них — vcoords.vt=VT_ARRAY|VT_VARIANT и vcoords.parray = SafeArrayCreate(VT_I4,...). Выделенные коды должны быть одинаковыми.

Также есть подозрение, что PowerPoint не работает с массивами, у которых нижний предел равен 0. Также возможно, что PowerPoint не работает с типом данных VT_I4. Последние подозрения основываются на MSDN примере (Dim triArray(1 To 4, 1 To 2) As Single ... ActivePresentation.Slides(1).Shapes.AddPolyline SafeArrayOfPoints:=triArray).

H>Собственно код:

H>VARIANT vcoords;
H>V_VT(&vcoords)=VT_ARRAY|VT_R4; \\Vi2 было VT_ARRAY|VT_VARIANT

H>SAFEARRAYBOUND saBound[ 2 ] ;
H>saBound[ 0 ].cElements = 2 ;
H>saBound[ 0 ].lLbound = 1; \\Vi2 было 0
H>saBound[ 1 ].cElements = 2 ;
H>saBound[ 1 ].lLbound = 1; \\Vi2 было 0

H>vcoords.parray = SafeArrayCreate( VT_R4, 2, saBound ); \\Vi2 было VT_I4

H>float coord[4]={20L,20L,100L,100L}; \\Vi2 было _variant_t

H>long arrPos[2];
H>arrPos[0] = 1; \\Vi2 было 0
H>arrPos[1] = 1; \\Vi2 было 0
H>hr=SafeArrayPutElement(vcoords.parray,arrPos,&coord[0]);
H>arrPos[0]++;
H>hr=SafeArrayPutElement(vcoords.parray,arrPos,&coord[1]);
H>arrPos[0] = 1; \\Vi2 было 0
H>arrPos[1] = 2; \\Vi2 было 1
H>hr=SafeArrayPutElement(vcoords.parray,arrPos,&coord[2]);
H>arrPos[0]++;
H>hr=SafeArrayPutElement(vcoords.parray,arrPos,&coord[3]);

H>PowerPoint::ShapePtr myShapePtr = pSlide->Shapes->AddPolyline( vcoords );

Хотя возможно, что должно сработать и с типом данных long (вместо float) и VT_I4 (вместо VT_R4), и с нижним индексом 0.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.