#pragma once

#ifdef __cplusplus

#include <unknwn.h>

const char* ffInitCom(void);

static inline void ffReleaseComObject(void* ppUnknown)
{
    IUnknown* pUnknown = *(IUnknown**) ppUnknown;
    if (pUnknown) pUnknown->Release();
}

#define FF_AUTO_RELEASE_COM_OBJECT __attribute__((__cleanup__(ffReleaseComObject)))

#else
    // Win32 COM headers requires C++ compiler
    #error Must be included in C++ source file
#endif
