Adding Windows Media Support to the ltmmConvert Object for C

The following code demonstrates how to add Windows Media support to the ltmmConvert Object.

// define helper macros for using interfaces under C
#define COBJMACROS
#include "ltmm.h"
#include "assert.h"

HINSTANCE g_hInstance;         // application instance handle
IltmmConvert* g_pConvert;      // convert object's interface pointer

// declare the windows media certificate creation function
HRESULT STDMETHODCALLTYPE WMCreateCertificate( IUnknown** pUnkCert ); 
// link the stub library
#pragma comment(lib, "wmstub.lib")


int APIENTRY WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPSTR     lpCmdLine, 
                     int       nCmdShow) 
{
   HRESULT hr; 
   IUnknown* punkCert; 
   
   g_hInstance = hInstance; 

   // initialize COM library
   hr = CoInitialize(NULL); 
   if(FAILED(hr)) 
      goto error; 
   
   // create the convert object
   hr = CoCreateInstance(&CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmConvert, (void**) &g_pConvert); 
   if(FAILED(hr)) 
      goto error; 
   
   // create windows media certificate   
   hr = WMCreateCertificate(&punkCert); 
   if(SUCCEEDED(hr)) 
   {
      // assign the certificate to the convert object
      IltmmConvert_put_WMCertificate (g_pConvert, punkCert); 
      IUnknown_Release(punkCert); 
   }   
   
#ifdef _DEBUG
   {
      // verify assignment
      IltmmConvert_get_WMCertificate(g_pConvert, &punkCert); 
      assert(punkCert != NULL); 
      if(punkCert) 
         IUnknown_Release(punkCert); 
   }
#endif

//   TODO: place additional code here

error: 
   // cleanup

   if(g_pConvert) 
      IUnknown_Release(g_pConvert); 

   CoUninitialize();
   
   return 0; 
}