#pragma once #ifndef __WFASSOC_H__ #define __WFASSOC_H__ #ifdef __cplusplus #include #include #else // __cplusplus #include #include #include #endif // __cplusplus #ifdef __cplusplus using CStyleString = const char*; using Token = uint64_t; using HICON = void*; #else // __cplusplus typedef const char *CStyleString; typedef uint64_t Token; typedef void *HICON; #endif // __cplusplus #ifdef __cplusplus constexpr HICON INVALID_HICON = nullptr; constexpr size_t INVALID_INDEX = static_cast(-1); #else // __cplusplus static const HICON INVALID_HICON = NULL; static const size_t INVALID_INDEX = ((size_t)-1); #endif // __cplusplus #ifdef __cplusplus enum class Scope : uint32_t { User = 0u, System = 1u }; enum class View : uint32_t { User = 0u, System = 1u, Hybrid = 2u }; #else // __cplusplus typedef uint32_t Scope; static const Scope SCOPE_USER = 0u; static const Scope SCOPE_SYSTEM = 1u; typedef uint32_t View; static const View VIEW_USER = 0u; static const View VIEW_SYSTEM = 1u; static const View VIEW_HYBRID = 2u; #endif // __cplusplus #ifdef __cplusplus namespace wfassoc { extern "C" { #endif // __cplusplus bool WFStartup(void); bool WFShutdown(void); CStyleString WFGetLastError(void); bool WFHasPrivilege(void); Token WFInvalidToken(void); bool WFSchemaCreate(Token *out_schema); bool WFSchemaDestroy(Token in_schema); bool WFSchemaSetIdentifier(Token in_schema, CStyleString in_value); bool WFSchemaSetPath(Token in_schema, CStyleString in_value); bool WFSchemaSetClsid(Token in_schema, CStyleString in_value); bool WFSchemaSetName(Token in_schema, CStyleString in_value); bool WFSchemaSetIcon(Token in_schema, CStyleString in_value); bool WFSchemaSetBehavior(Token in_schema, CStyleString in_value); bool WFSchemaAddStr(Token in_schema, CStyleString in_name, CStyleString in_value); bool WFSchemaAddIcon(Token in_schema, CStyleString in_name, CStyleString in_value); bool WFSchemaAddBehavior(Token in_schema, CStyleString in_name, CStyleString in_value); bool WFSchemaAddExt(Token in_schema, CStyleString in_ext, CStyleString in_ext_name, CStyleString in_ext_icon, CStyleString in_ext_behavior); bool WFProgramCreate(Token in_schema, Token *out_program); bool WFProgramDestroy(Token in_program); bool WFProgramResolveName(Token in_program, CStyleString *out_name); bool WFProgramResolveIcon(Token in_program, Token *out_icon_rc); bool WFProgramExtsLen(Token in_program, size_t *out_len); bool WFProgramGetExt(Token in_program, size_t in_index, Token *out_ext); bool WFProgramFindExt(Token in_program, CStyleString in_body, size_t *out_index); bool WFProgramRegister(Token in_program, Scope in_scope); bool WFProgramUnregister(Token in_program, Scope in_scope); bool WFProgramIsRegistered(Token in_program, Scope in_scope, bool *out_is_registered); bool WFProgramLinkExt(Token in_program, Scope in_scope, size_t in_index); bool WFProgramUnlinkExt(Token in_program, Scope in_scope, size_t in_index); bool WFProgramQueryExt(Token in_program, View in_view, size_t in_index, Token *out_ext_status); bool WFExtStatusDestroy(Token in_ext_status); bool WFExtStatusGetName(Token in_ext_status, CStyleString *out_name); bool WFExtStatusGetIcon(Token in_ext_status, HICON *out_icon); bool WFIconRcDestroy(Token in_icon_rc); bool WFIconRcGetIcon(Token in_icon_rc, HICON *out_icon); bool WFExtDestroy(Token in_ext); bool WFExtGetInner(Token in_ext, CStyleString *out_inner); bool WFExtGetDottedInner(Token in_ext, CStyleString *out_inner); #ifdef __cplusplus } // extern "C" } // namespace wfassoc #endif // __cplusplus #endif // __WFASSOC_H__