Creating a Virtual Function Table for a Stream Handler

The following example (written in C) shows how an application (AVIBall) creates the virtual function table used to reference its services.

HRESULT STDMETHODCALLTYPE AVIBallQueryInterface (PAVISTREAM ps,

REFIID riid, LPVOID FAR* ppvObj);

HRESULT STDMETHODCALLTYPE AVIBallCreate (PAVISTREAM ps,

LONG lParam1, LONG lParam2);

ULONG STDMETHODCALLTYPE AVIBallAddRef (PAVISTREAM ps);

ULONG STDMETHODCALLTYPE AVIBallRelease (PAVISTREAM ps);

HRESULT STDMETHODCALLTYPE AVIBallInfo (PAVISTREAM ps,

AVIStreamHeader FAR * psi, LONG lSize);

LONG STDMETHODCALLTYPE AVIBallFindSample (PAVISTREAM ps,

LONG lPos, LONG lFlags);

HRESULT STDMETHODCALLTYPE AVIBallReadFormat (PAVISTREAM ps,

LONG lPos, LPVOID lpFormat, LONG FAR *lpcbFormat);

HRESULT STDMETHODCALLTYPE AVIBallSetFormat (PAVISTREAM ps,

LONG lPos, LPVOID lpFormat, LONG cbFormat);

HRESULT STDMETHODCALLTYPE AVIBallRead (PAVISTREAM ps,

LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer,

LONG FAR * plBytes,LONG FAR * plSamples);

HRESULT STDMETHODCALLTYPE AVIBallWrite (PAVISTREAM ps, LONG lStart,

LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags);

HRESULT STDMETHODCALLTYPE AVIBallDelete (PAVISTREAM ps,

LONG lStart, LONG lSamples);

HRESULT STDMETHODCALLTYPE AVIBallReadData (PAVISTREAM ps,

DWORD fcc, LPVOID lp,LONG FAR *lpcb);

HRESULT STDMETHODCALLTYPE AVIBallWriteData (PAVISTREAM ps,

DWORD fcc, LPVOID lp,LONG cb);

IAVIStreamVtbl AVIBallHandler = {

AVIBallQueryInterface, // Function pointer for ::QueryInterface

AVIBallAddRef, // Function pointer for ::AddRef

AVIBallRelease, // Function pointer for ::Release

AVIBallCreate, // Function pointer for ::Create

AVIBallInfo, // Function pointer for ::Info

AVIBallFindSample, // Function pointer for ::FindSample

AVIBallReadFormat, // Function pointer for ::ReadFormat

AVIBallSetFormat, // Function pointer for ::SetFormat

AVIBallRead, // Function pointer for ::Read

AVIBallWrite, // Function pointer for ::Write

AVIBallDelete, // Function pointer for ::Delete

AVIBallReadData, // Function pointer for ::ReadData

AVIBallWriteData // Function pointer for ::WriteData

};

File handlers use a similar procedure, except they use a different definition for the virtual function table.

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database