📄 sybapi_linux.cpp
字号:
static void ResetAPI()
{
g_sybAPI.ct_debug = NULL;
g_sybAPI.ct_bind = NULL;
g_sybAPI.ct_br_column = NULL;
g_sybAPI.ct_br_table = NULL;
g_sybAPI.ct_callback = NULL;
g_sybAPI.ct_cancel = NULL;
g_sybAPI.ct_capability = NULL;
g_sybAPI.ct_compute_info = NULL;
g_sybAPI.ct_close = NULL;
g_sybAPI.ct_cmd_alloc = NULL;
g_sybAPI.ct_cmd_drop = NULL;
g_sybAPI.ct_cmd_props = NULL;
g_sybAPI.ct_command = NULL;
g_sybAPI.ct_con_alloc = NULL;
g_sybAPI.ct_con_drop = NULL;
g_sybAPI.ct_con_props = NULL;
g_sybAPI.ct_connect = NULL;
g_sybAPI.ct_config = NULL;
g_sybAPI.ct_cursor = NULL;
g_sybAPI.ct_dyndesc = NULL;
g_sybAPI.ct_describe = NULL;
g_sybAPI.ct_diag = NULL;
g_sybAPI.ct_dynamic = NULL;
g_sybAPI.ct_dynsqlda = NULL;
g_sybAPI.ct_exit = NULL;
g_sybAPI.ct_fetch = NULL;
g_sybAPI.ct_getformat = NULL;
g_sybAPI.ct_keydata = NULL;
g_sybAPI.ct_init = NULL;
g_sybAPI.ct_options = NULL;
g_sybAPI.ct_param = NULL;
g_sybAPI.ct_getloginfo = NULL;
g_sybAPI.ct_setloginfo = NULL;
g_sybAPI.ct_recvpassthru = NULL;
g_sybAPI.ct_sendpassthru = NULL;
g_sybAPI.ct_poll = NULL;
g_sybAPI.ct_remote_pwd = NULL;
g_sybAPI.ct_results = NULL;
g_sybAPI.ct_res_info = NULL;
g_sybAPI.ct_send = NULL;
g_sybAPI.ct_get_data = NULL;
g_sybAPI.ct_send_data = NULL;
g_sybAPI.ct_data_info = NULL;
g_sybAPI.ct_wakeup = NULL;
g_sybAPI.ct_labels = NULL;
g_sybAPI.ct_ds_lookup = NULL;
g_sybAPI.ct_ds_dropobj = NULL;
g_sybAPI.ct_ds_objinfo = NULL;
g_sybAPI.ct_setparam = NULL;
g_sybAPI.cs_calc = NULL;
g_sybAPI.cs_cmp = NULL;
g_sybAPI.cs_convert = NULL;
g_sybAPI.cs_will_convert = NULL;
g_sybAPI.cs_set_convert = NULL;
g_sybAPI.cs_setnull = NULL;
g_sybAPI.cs_config = NULL;
g_sybAPI.cs_ctx_alloc = NULL;
g_sybAPI.cs_ctx_drop = NULL;
g_sybAPI.cs_ctx_global = NULL;
g_sybAPI.cs_objects = NULL;
g_sybAPI.cs_diag = NULL;
g_sybAPI.cs_dt_crack = NULL;
g_sybAPI.cs_dt_info = NULL;
g_sybAPI.cs_locale = NULL;
g_sybAPI.cs_loc_alloc = NULL;
g_sybAPI.cs_loc_drop = NULL;
g_sybAPI.cs_strbuild = NULL;
g_sybAPI.cs_strcmp = NULL;
g_sybAPI.cs_time = NULL;
g_sybAPI.cs_manage_convert = NULL;
g_sybAPI.cs_conv_mult = NULL;
}
void AddSybSupport()
{
if(!g_nDLLRefs)
{
try
{
// these are not critical
g_hDLL_INSCK = ::dlopen(g_sDLLName_INSCK, RTLD_LAZY | RTLD_GLOBAL);
g_hDLL_TLI = ::dlopen(g_sDLLName_TLI, RTLD_LAZY | RTLD_GLOBAL);
g_hDLL_NSL = ::dlopen(g_sDLLName_NSL, RTLD_LAZY | RTLD_GLOBAL);
// these are critical
g_hDLL_COMN = ::dlopen(g_sDLLName_COMN, RTLD_LAZY | RTLD_GLOBAL);
g_hDLL_CT = ::dlopen(g_sDLLName_CT, RTLD_LAZY | RTLD_GLOBAL);
g_hDLL_CS = ::dlopen(g_sDLLName_CS, RTLD_LAZY | RTLD_GLOBAL);
g_hDLL_INTL = ::dlopen(g_sDLLName_INTL, RTLD_LAZY | RTLD_GLOBAL);
g_hDLL_TCL = ::dlopen(g_sDLLName_TCL, RTLD_LAZY | RTLD_GLOBAL);
if(!g_hDLL_TCL) // new name fails, try old one
g_hDLL_TCL = ::dlopen(g_sDLLName_TCL_OLD, RTLD_LAZY | RTLD_GLOBAL);
if(!g_hDLL_COMN)
throw SAException(SA_Library_Error, -1, -1, IDS_LOAD_LIBRARY_FAILS, ::dlerror(), g_sDLLName_COMN);
if(!g_hDLL_CT)
throw SAException(SA_Library_Error, -1, -1, IDS_LOAD_LIBRARY_FAILS, ::dlerror(), g_sDLLName_CT);
if(!g_hDLL_CS)
throw SAException(SA_Library_Error, -1, -1, IDS_LOAD_LIBRARY_FAILS, ::dlerror(), g_sDLLName_CS);
if(!g_hDLL_INTL)
throw SAException(SA_Library_Error, -1, -1, IDS_LOAD_LIBRARY_FAILS, ::dlerror(), g_sDLLName_INTL);
if(!g_hDLL_TCL)
throw SAException(SA_Library_Error, -1, -1, IDS_LOAD_LIBRARY_FAILS, ::dlerror(), g_sDLLName_TCL);
LoadAPI();
}
catch(SAException &) // clean up on error
{
if(g_hDLL_INSCK)
{
::dlclose(g_hDLL_INSCK);
g_hDLL_INSCK = NULL;
}
if(g_hDLL_TLI)
{
::dlclose(g_hDLL_TLI);
g_hDLL_TLI = NULL;
}
if(g_hDLL_NSL)
{
::dlclose(g_hDLL_NSL);
g_hDLL_NSL = NULL;
}
if(g_hDLL_COMN)
{
::dlclose(g_hDLL_COMN);
g_hDLL_COMN = NULL;
}
if(g_hDLL_CT)
{
::dlclose(g_hDLL_CT);
g_hDLL_CT = NULL;
}
if(g_hDLL_CS)
{
::dlclose(g_hDLL_CS);
g_hDLL_CS = NULL;
}
if(g_hDLL_INTL)
{
::dlclose(g_hDLL_INTL);
g_hDLL_INTL = NULL;
}
if(g_hDLL_TCL)
{
::dlclose(g_hDLL_TCL);
g_hDLL_TCL = NULL;
}
throw;
}
}
g_nDLLRefs++;
}
void ReleaseSybSupport()
{
assert(g_nDLLRefs > 0);
g_nDLLRefs--;
if(!g_nDLLRefs)
{
ResetAPI();
if(g_hDLL_INSCK)
{
::dlclose(g_hDLL_INSCK);
g_hDLL_INSCK = NULL;
}
if(g_hDLL_TLI)
{
::dlclose(g_hDLL_TLI);
g_hDLL_TLI = NULL;
}
if(g_hDLL_NSL)
{
::dlclose(g_hDLL_NSL);
g_hDLL_NSL = NULL;
}
::dlclose(g_hDLL_COMN);
g_hDLL_COMN = NULL;
::dlclose(g_hDLL_CT);
g_hDLL_CT = NULL;
::dlclose(g_hDLL_CS);
g_hDLL_CS = NULL;
::dlclose(g_hDLL_INTL);
g_hDLL_INTL = NULL;
::dlclose(g_hDLL_TCL);
g_hDLL_TCL = NULL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -