2023-01-25 15:49:31 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
2026-05-06 15:01:40 +08:00
|
|
|
#include "common/attributes.h"
|
|
|
|
|
#include <assert.h>
|
|
|
|
|
#include <unknwn.h>
|
2023-01-25 15:49:31 +08:00
|
|
|
|
2026-05-06 14:38:10 +08:00
|
|
|
// Initialize COM & WinRT
|
2023-01-25 15:49:31 +08:00
|
|
|
const char* ffInitCom(void);
|
|
|
|
|
|
2026-03-29 09:28:49 +08:00
|
|
|
static inline void ffReleaseComObject(void* ppUnknown) {
|
2026-05-06 15:01:40 +08:00
|
|
|
assert(ppUnknown);
|
2023-01-25 15:49:31 +08:00
|
|
|
IUnknown* pUnknown = *(IUnknown**) ppUnknown;
|
2026-03-29 09:28:49 +08:00
|
|
|
if (pUnknown) {
|
2026-05-06 15:01:40 +08:00
|
|
|
#ifdef __cplusplus
|
2026-03-29 09:28:49 +08:00
|
|
|
pUnknown->Release();
|
2026-05-06 15:01:40 +08:00
|
|
|
#else
|
|
|
|
|
pUnknown->lpVtbl->Release(pUnknown);
|
|
|
|
|
#endif
|
2026-07-10 18:08:04 +08:00
|
|
|
*(IUnknown**) ppUnknown = nullptr;
|
2026-03-29 09:28:49 +08:00
|
|
|
}
|
2023-01-25 15:49:31 +08:00
|
|
|
}
|
|
|
|
|
|
2026-05-06 15:01:40 +08:00
|
|
|
#define FF_AUTO_RELEASE_COM_OBJECT FF_A_CLEANUP(ffReleaseComObject)
|