Obtaining the Address of a Virtual Function Table

[The feature associated with this page, Custom File and Stream Handlers, is a legacy feature. It has been superseded by MediaStreamSource class. MediaStreamSource class has been optimized for Windows 10 and Windows 11. Microsoft strongly recommends that new code use MediaStreamSource class instead of Custom File and Stream Handlers, when possible. Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if possible.]

In an application written in the C programming language, you can retrieve the address of the IAVIStreamVtbl structure by using the NewBall function. This function returns the address of a structure containing a pointer to IAVIStreamVtbl. Information following the IAVIStreamVtbl pointer specifies data used internally by AVIBall. Your stream handler can append its own information after the IAVIStreamVtbl pointer. This information is returned in subsequent calls to your stream handler.

PAVISTREAM WINAPI NewBall(VOID) 
{ 
    PAVIBALL pball; 
    pball = (PAVIBALL) GlobalAllocPtr(GHND, sizeof(AVIBALL)); 
    if (!pball) 
        return 0; 
    pball->lpvtbl = &AVIBallHandler; 
    pball->lpvtbl->Create((PAVISTREAM) pball, 0, 0); 
    return (PAVISTREAM) pball; 
}