Criando um ponteiro de objeto
[O recurso associado a esta página, Arquivos Personalizados e Manipuladores de Fluxo, é um recurso herdado. Ele foi substituído pela classe MediaStreamSource. A classe MediaStreamSource foi otimizada para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use a classe MediaStreamSource em vez de manipuladores de arquivos personalizados e de fluxo, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
O AVIBall usa a estrutura a seguir como seu ponteiro de objeto. O primeiro membro dessa estrutura aponta para a tabela de funções virtuais que a AVIBall usa para acessar suas funções. Os aplicativos podem converter essa estrutura no tipo de dados PAVISTREAM. Os métodos que usam o tipo de dados PAVISTREAM usam apenas o ponteiro para a tabela de funções virtuais. Os membros que seguem o ponteiro para a tabela de funções virtuais são usados internamente pelo AVIBall.
typedef struct
{
IAVIStreamVtbl FAR * lpvtbl;
// Ball instance data.
ULONG ulRefCount;
DWORD fccType; // is this audio/video?
int width; // size, in pixels, of each frame
int height;
int length; // length, in frames
int size;
COLORREF color; // ball color
} AVIBALL, FAR * PAVIBALL;