#ifndef __ACE_SDK_COMMON_H__ #define __ACE_SDK_COMMON_H__ #include #include #ifdef _WIN32 #include #else #include #include #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