9 #pragma once // NOLINT(build/header_guard)
11 #include "NGIAgoraExtensionControl.h"
14 #define DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, ...) \
15 static void register_##PROVIDER_NAME##_to_agora() { \
16 auto control = getAgoraExtensionControl(); \
17 if (#PROVIDER_NAME && control) { \
18 control->registerProvider(#PROVIDER_NAME, \
19 new agora::RefCountedObject<PROVIDER_CLASS>(__VA_ARGS__)); \
23 #if defined (__GNUC__)
24 #define REGISTER_AGORA_EXTENSION_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, ...) \
25 DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, __VA_ARGS__); \
26 typedef void(*agora_ext_entry_func_t)(void); \
27 AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t); \
28 __attribute__((constructor, used)) \
29 static void _##PROVIDER_NAME##_provider_entry() { \
30 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
33 #elif defined (_MSC_VER)
34 #define REGISTER_AGORA_EXTENSION_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, ...) \
35 DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, __VA_ARGS__); \
36 typedef void(*agora_ext_entry_func_t)(void); \
37 AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t); \
38 BOOL APIENTRY DllMain( HMODULE hModule, \
39 DWORD ul_reason_for_call, \
40 LPVOID lpReserved) { \
41 switch (ul_reason_for_call) { \
42 case DLL_PROCESS_ATTACH: \
43 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
51 #define REGISTER_AGORA_EXTENSION_PROVIDER_WITH_CUSTOM_DLLMAIN(PROVIDER_NAME, PROVIDER_CLASS, DLLMAINFUNC, ...) \
52 DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, __VA_ARGS__); \
53 typedef void(*agora_ext_entry_func_t)(void); \
54 AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t); \
55 BOOL APIENTRY DllMain( HMODULE hModule, \
56 DWORD ul_reason_for_call, \
57 LPVOID lpReserved) { \
58 if (!DLLMAINFUNC(hModule, ul_reason_for_call, lpReserved)) { \
61 switch (ul_reason_for_call) { \
62 case DLL_PROCESS_ATTACH: \
63 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
72 #error Unsupported Compilation Toolchain!