ohmu
·
2026-10-15
1#pragma once
2
3#include <assert.h>
4#include <unknwn.h>
5
6// Initialize COM & WinRT
7const char* ffInitCom(void);
8
9static inline void ffReleaseComObject(void* ppUnknown) {
10 assert(ppUnknown);
11 IUnknown* pUnknown = *(IUnknown**) ppUnknown;
12 if (pUnknown) {
13#ifdef __cplusplus
14 pUnknown->Release();
15#else
16 pUnknown->lpVtbl->Release(pUnknown);
17#endif
18 *(IUnknown**) ppUnknown = nullptr;
19 }
20}
21
22#define FF_AUTO_RELEASE_COM_OBJECT [[gnu::cleanup(ffReleaseComObject)]]