📄 interface.cpp
字号:
#include "stdafx.h"
#include "interface.h"
#include "stdio.h"
#include "CDBError.h"
#include "CDBSession.h"
#include "CDBStatement.h"
#include "CDBTable.h"
void checkError(char *fn,int line,int errcode);
#define THROW_ERROR(ecode) {checkError(__FILE__,__LINE__,ecode); }
#define NO_FREE_HANDLE -1
#define INVALID_HANDLE -2
#define NEW_SESS_FAIL -3
#define NEW_STMT_FAIL -4
#define NEW_TABL_FAIL -5
#define MAX_SESS 20 //cdbsession
#define MAX_STMT 100
#define MAX_TABL 100//
#define HANDLE_SESS 0x2000
#define HANDLE_STMT 0x4000
#define HANDLE_TABL 0x6000
static CDBSession *hd_sess[MAX_SESS];
static CDBStatement *hd_stmt[MAX_STMT];
static CDBTable *hd_table[MAX_TABL];
static bool b_init=false;
DllExport void dbInit( char *AppName)
{
if(b_init) return;
int i=0;
for(i=0; i<MAX_SESS; i++)
hd_sess[i] = NULL;
for(i=0; i<MAX_STMT; i++)
hd_stmt[i] = NULL;
for(i=0; i<MAX_TABL; i++)
hd_table[i] = NULL;
}
void checkError(char *fn,int line,int errcode)
{
CDBError err;
char buf[100];
err.SetErrCode(errcode);
err.SetErrPos(line,fn);
switch (errcode){
case NO_FREE_HANDLE:
strcpy(buf,"没有空闲的HANDLE");
break;
case INVALID_HANDLE:
strcpy(buf,"无效的HANDLE");
break;
case NEW_SESS_FAIL:
strcpy(buf,"创建CDBSession对象失败");
break;
case NEW_STMT_FAIL:
strcpy(buf,"创建CDBStatement对象失败");
break;
case NEW_TABL_FAIL:
strcpy(buf,"创建CDBTable对象失败");
break;
default:
strcpy(buf,"没有定义的错误");
}
err.SetErrMsg(buf);
throw (err);
}
int getFreeHandle(void **pobject,int objNum)
{
int i=0,rt=-1;
for(;i<objNum; i++)
if(pobject[i]==NULL){rt = -1;break;}
if(rt != -1) {
pobject[rt] = (void *)-1;
return rt;
}
return -1;
}
int checkHandle(int p,int len)
{
if(p<0 || p>=len)
THROW_ERROR(INVALID_HANDLE);
return p;
}
DllExport int createDBSession(char *user,char *password,char *svrname)
{
int fh=getFreeHandle((void **)hd_sess,MAX_SESS);
if(fh == -1) THROW_ERROR(NO_FREE_HANDLE);
bool rt=false;
CDBSession *p=new CDBSession();
if(p == NULL) THROW_ERROR(NEW_SESS_FAIL);
try{
rt = p->Connect(user,password,svrname);
}catch(...){
delete p;
p = NULL;
throw;
}
if(p != NULL)
hd_sess[fh] = p;
return fh+HANDLE_SESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -