Опираясь на документацию к COM и интерфейсный модуль к DirectShow из подсистемы Mt, попытался написать интерфейсный модуль к Direct3D. В итоге что-то работает, а что-то нет.
Например, описал я интерфейс IDirect3D9 и его метод GetAdapterDisplayMode. И, судя по всему, метод этот работает, так как в итоге в записи D3DDISPLAYMODE у меня записываются, например, ширина и высота окна рендеринга.
Но вот описываю далее точно также интерфейс IDirect3DDevice9 и его метод Clear, и при вызове этого метода у меня трап говорит: NIL dereference (read).
Вот описание этого метода из MSDN:
Код:
HRESULT Clear(
DWORD Count,
CONST D3DRECT * pRects,
DWORD Flags,
D3DCOLOR Color,
float Z,
DWORD Stencil
);
В своём модуле я написал так:
Код:
D3DRECT* = RECORD [untagged]
x1*, y1*: LONGINT;
x2*, y2*: LONGINT
END;
IDirect3DDevice9* = POINTER TO ABSTRACT RECORD
["{02177241-69FC-400C-8FF1-93A44DF6861D}"] (COM.IUnknown) END;
PROCEDURE (this: IDirect3DDevice9) Clear* (Count: INTEGER; IN pRects: D3DRECT; Flags: INTEGER; Color: D3DCOLOR; Z: SHORTREAL; Stencil: INTEGER): COM.RESULT, NEW, ABSTRACT;