235 lines
5.9 KiB
C
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
|
|
|