Ситуация такая: разбираю EMF-файл для перевода его в другой векторный формат(DXF/DWG).
У меня возникли непонятки с EMRSELECTOBJECT
[pascal]
//это часть реализации колбек-функции
function TEmfPlayer.DoOnProcessEMR(aDC: HDC; pHTable: PHandleTable;
const pEMFR: PEMR; HTableCount: integer): boolean;
{var ....}
begin
try
iT := pEMFR^.iType;
if iT = EMR_SELECTOBJECT then begin
//здесь иногда PEMRSelectObject(pEMFR)^.ihObject больше HTableCount (а точнее он равен $80000005)
//????????? что с этим делать??? где искать баг?
aGDIOBJ := pHTable^.objectHandle[PEMRSelectObject(pEMFR)^.ihObject];
gdiObjType := GetObjectType(aGDIOBJ);
if gdiObjType=0 then begin
fLastErr := IntToStr(GetLastError);// GetLastError возвращает 0
end;
//дальше анализирую тип ГДИ объекта и устанавливаю свои внутренние объекты
case gdiObjType of
OBJ_BRUSH: begin
if fBrush.Handle <> aGDIOBJ then SetBrushProps(aGDIOBJ, fBrush);
end;
OBJ_PEN : begin
{...}
end;
OBJ_FONT : begin{fFontFormed := false;}
{...}
end;
else { OBJ_BITMAP, OBJ_COLORSPACE, OBJ_DC, OBJ_ENHMETADC, OBJ_ENHMETAFILE
OBJ_EXTPEN, OBJ_MEMDC, OBJ_METAFILE, OBJ_METADC, OBJ_PAL, OBJ_REGION}
begin
fLastErr := IntToStr(gdiObjType);
end;
end;
{... далее не важно}
[/pascal]
Вобщем вопрос:
иногда PEMRSelectObject(pEMFR)^.ihObject больше HTableCount
(а точнее он равен $80000005, HTableCount =5)
что с этим делать??? где искать баг?