Опираясь на документацию к 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;
```
