⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sybapi_linux.cpp

📁 通用的数据库中间库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 + -