Files
dnf-utils/ace_sdk/client/include/ace_sdk_common.h
T
2025-12-06 17:59:24 +08:00

235 lines
5.9 KiB
C

#ifndef __ACE_SDK_COMMON_H__
#define __ACE_SDK_COMMON_H__
#include <stdint.h>
#include <stdio.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <dlfcn.h>
#endif
#ifdef __cplusplus
#define ACE_EXTERN_C extern "C"
#else
#define ACE_EXTERN_C
#endif
#if defined(_WIN32) && !defined(_WIN64)
#define ACE_SDK_CALL __cdecl
#else
#define ACE_SDK_CALL
#endif
#ifdef _WIN32
typedef wchar_t ACE_CHAR;
#else
typedef char ACE_CHAR;
#endif
typedef enum
{
ACE_SDK_RESULT_OK = 0,
ACE_SDK_RESULT_NOT_SUPPORTED = 1,
ACE_SDK_RESULT_INVALID_PARAMETER = 2,
ACE_SDK_RESULT_CALC_PATH_FAILED = 3,
ACE_SDK_RESULT_LOAD_LIBRARY_FAILED = 4,
ACE_SDK_RESULT_UNLOAD_LIBRARY_FAILED = 5,
ACE_SDK_RESULT_SYMBOL_NOT_FOUND = 6,
ACE_SDK_RESULT_INIT_NOT_CALLED_OR_FAILED = 7,
ACE_SDK_RESULT_INTERNAL_ERROR = 8,
ACE_SDK_RESULT_ACCOUNT_TOO_LONG = 9,
ACE_SDK_RESULT_ACCOUNT_ILLEGAL_CHARACTER = 10,
ACE_SDK_RESULT_NO_PACKET_NEED_SENDING = 100,
ACE_SDK_RESULT_ILLEGAL_LOG_IN = 101,
ACE_SDK_RESULT_COMMON_END = 1000,
ACE_SDK_RESULT_DEVELOP_LANGUAGE_BEGIN = 10000,
ACE_SDK_RESULT_PACK_STRUCT_1BYTE_ERROR = 10001,
ACE_SDK_RESULT_UNPACK_STRUCT_1BYTE_ERROR = 10002,
ACE_SDK_RESULT_PACK_STRUCT_1BYTE_LEN_ERROR = 10003,
ACE_SDK_RESLUT_JAVA_JNI_BEGIN = 20001,
ACE_SDK_RESLUT_JAVA_JNI_ENV_NULL = 20002,
ACE_SDK_RESLUT_JAVA_JNI_JVM_NULL = 20003,
ACE_SDK_RESLUT_JAVA_JNI_JOBJECT_NULL = 20004,
ACE_SDK_RESLUT_JAVA_JNI_CLASS_NULL = 20005,
ACE_SDK_RESLUT_JAVA_JNI_REFLECT_BS_DATA_FAILED = 20006,
ACE_SDK_RESLUT_JAVA_JNI_REFLECT_BS_OFFSET_FAILED = 20007,
ACE_SDK_RESLUT_JAVA_JNI_REFLECT_BS_CAPACITY_FAILED = 20008,
ACE_SDK_RESLUT_JAVA_JNI_REFLECT_BS_LENGTH_ERROR = 20009,
// Array field must use the pre-defined length
ACE_SDK_RESLUT_JAVA_ARRAY_LENTGH_ERROR = 20010,
ACE_SDK_RESLUT_JAVA_JNI_END = 20100,
ACE_SDK_RESULT_DEVELOP_LANGUAGE_END = 99999,
ACE_SDK_RESULT_BUSI_INTERFACE_BEGIN = 100000,
ACE_SDK_RESLUT_LIGHT_FEATURE_BEGIN = 100001,
ACE_SDK_RESLUT_LIGHT_FEATURE_NOT_OPENED = 100002,
ACE_SDK_RESLUT_LIGHT_FEATURE_END = 100100,
ACE_SDK_RESLUT_UIC_BEGIN = 100101,
ACE_SDK_RESULT_UIC_TEXT_INTERF_CALL_FAILED = 100102,
ACE_SDK_RESULT_UIC_TEXT_CALLBACK_HAS_NOT_SET = 100103,
ACE_SDK_RESULT_UIC_PIC_INTERF_CALL_FAILED = 100104,
ACE_SDK_RESULT_UIC_PIC_CALLBACK_HAS_NOT_SET = 100105,
ACE_SDK_RESLUT_UIC_END = 100200,
ACE_SDK_RESULT_SAFEMODE_BEGIN = 100201,
ACE_SDK_RESULT_SAFEMODE_CALLBACK_HAS_NOT_SET = 100202,
ACE_SDK_RESULT_SAFEMODE_INTERF_CALL_FAILED = 100203,
ACE_SDK_RESULT_SAFEMODE_END = 100300,
ACE_SDK_RESULT_GAME_SESSION_BEGIN = 100301,
ACE_SDK_RESULT_GAME_SESSION_INTERF_CALL_FAILED = 100302,
ACE_SDK_RESULT_GAME_SESSION_END = 100400,
ACE_SDK_RESULT_BUSI_INTERFACE_END = 999999,
ACE_SDK_RESULT_MAX_INT32 = 0x7fffffff,
} AceSdkResult;
// ----------------------------------------------------
// Internal definitions and functions
// ----------------------------------------------------
#ifdef _WIN32
typedef HMODULE __ACE_SDK_MODULE;
#else
typedef void* __ACE_SDK_MODULE;
#endif
#if defined(ACE_CGO)
extern __ACE_SDK_MODULE __ace_sdk_global_module;
#elif defined(_WIN32) && defined(_MSC_VER)
__declspec(selectany) __ACE_SDK_MODULE __ace_sdk_global_module;
#else
__attribute__((weak)) __ACE_SDK_MODULE __ace_sdk_global_module;
#endif
#ifdef _WIN32
inline int32_t __ace_sdk_load_library_win(const ACE_CHAR* path)
{
if (__ace_sdk_global_module != NULL)
{
return ACE_SDK_RESULT_OK;
}
__ace_sdk_global_module = LoadLibraryW(path);
if (__ace_sdk_global_module == NULL)
{
return ACE_SDK_RESULT_LOAD_LIBRARY_FAILED;
}
return ACE_SDK_RESULT_OK;
}
inline void* __ace_sdk_get_symbol_win(const char* symbol_name)
{
if (__ace_sdk_global_module == NULL)
{
return NULL;
}
void* func = (void*)GetProcAddress(__ace_sdk_global_module, symbol_name);
return func;
}
inline int32_t __ace_sdk_unload_library_win()
{
if (__ace_sdk_global_module == NULL)
{
return ACE_SDK_RESULT_OK;
}
BOOL ret = FreeLibrary(__ace_sdk_global_module);
__ace_sdk_global_module = NULL;
return ret == TRUE ? ACE_SDK_RESULT_OK : ACE_SDK_RESULT_UNLOAD_LIBRARY_FAILED;
}
#else
inline int32_t __ace_sdk_load_library_linux(const ACE_CHAR* path)
{
char* error = NULL;
if (__ace_sdk_global_module != NULL)
{
return ACE_SDK_RESULT_OK;
}
__ace_sdk_global_module = dlopen(path, RTLD_NOW);
error = dlerror();
if (error)
{
fprintf(stderr, "Open shared library %s failed, %s.\n", path, error);
return ACE_SDK_RESULT_LOAD_LIBRARY_FAILED;
}
return ACE_SDK_RESULT_OK;
}
inline void* __ace_sdk_get_symbol_linux(const char* symbol_name)
{
void *func = NULL;
char *error = NULL;
if (__ace_sdk_global_module == NULL)
{
return NULL;
}
func = dlsym(__ace_sdk_global_module, symbol_name);
error = dlerror();
if (error)
{
fprintf(stderr, "dlsym failed, %s.\n", error);
return NULL;
}
return func;
}
inline int32_t __ace_sdk_unload_library_linux()
{
if (__ace_sdk_global_module == NULL)
{
return ACE_SDK_RESULT_OK;
}
int32_t ret = dlclose(__ace_sdk_global_module);
__ace_sdk_global_module = NULL;
if (ret != 0)
{
return ACE_SDK_RESULT_LOAD_LIBRARY_FAILED;
}
return ACE_SDK_RESULT_OK;
}
#endif
inline int32_t __ace_sdk_load_library(const ACE_CHAR* path)
{
#ifdef _WIN32
return __ace_sdk_load_library_win(path);
#else
return __ace_sdk_load_library_linux(path);
#endif
}
inline void* __ace_sdk_get_symbol(const char* symbol_name)
{
#ifdef _WIN32
return __ace_sdk_get_symbol_win(symbol_name);
#else
return __ace_sdk_get_symbol_linux(symbol_name);
#endif
}
inline int32_t __ace_sdk_unload_library()
{
#if defined(_WIN32)
return __ace_sdk_unload_library_win();
#else
return __ace_sdk_unload_library_linux();
#endif
}
#endif