📄 myvc.cpp
字号:
}
if (strcmp(l_key, "SQLRESULTNAME")==0) { // SQLResultName
p_result = &(pGCA->SQLResultName);
}
if (strcmp(l_key, "SQLRESULTSAVED")==0) { // SQLResultSaved
p_result = &(pGCA->SQLResultSaved);
}
if (strcmp(l_key, "CONTROLAPPNAME")==0) { // ControlAppName
p_result = &(pGCA->ControlAppName);
}
if (strcmp(l_key, "DBSERVERAPPNAME")==0) { // DBServerAppName
p_result = &(pGCA->DBServerAppName);
}
if (strcmp(l_key, "DBCLIENTAPPNAME")==0) { // DBClientAppName
p_result = &(pGCA->DBClientAppName);
}
if (strcmp(l_key, "CUIJIAOAPPNAME")==0) { // CuiJiaoAppName
p_result = &(pGCA->DBClientAppName);
}
if (strcmp(l_key, "STARTQUERYMONTH")==0) { // StartQueryMonth
p_result = &(pGCA->StartQueryMonth);
}
if (strcmp(l_key, "ENDQUERYMONTH")==0) { // EndQueryMonth
p_result = &(pGCA->EndQueryMonth);
}
if (strcmp(l_key, "CURQFTABLE")==0) { // CurQfTable
p_result = &(pGCA->CurQfTable);
}
if (strcmp(l_key, "CURQFTABLE")==0) { // CurQfTable
p_result = &(pGCA->CurQfTable);
}
if (strcmp(l_key, "LOG_UTPT")==0) { // Log_Utpt
p_result = &(pGCA->Log_Utpt);
}
if (strcmp(l_key, "INITSTATUS")==0) { // InitStatus
p_result = &(pGCA->InitStatus);
}
if (strcmp(l_key, "INITHIDE")==0) { // InitHide
p_result = &(pGCA->InitHide);
}
if (strcmp(l_key, "VFIT_LEN")==0) { // VFIT_LEN
p_result = &(pGCA->VFIT_LEN);
}
if (strcmp(l_key, "VOX_PATH")==0) { // txt
p_result = &(pGCA->vox_path);
}
if (strcmp(l_key, "TXT")==0) { // txt
p_result = &(pGCA->txt);
}
CloseHandle(hMap);
ReleaseLock(hlock);
return p_result;
}
/***********************************************************************************************
函数: LPVOID ReadGCARefuseCall(char * index)
说明: 获取拒绝号码
index : RefuseCall表的位置(1...MaxRefuseCall)
返回: :拒绝服务号码字符串,如果表结束(EOT),返回NULL
************************************************************************************************/
extern "C" _declspec ( dllexport ) LPVOID PASCAL ReadGCARefuseCall(char * index)
{
GCA * pGCA;
int l_index;
HANDLE hMap;
LPVOID p_Map;
LPVOID p_result;
HANDLE hlock; //共享锁
//等待共享文件被释放,然后抢占并琐定
hlock = WaitLock(MUTEX_GCA);
l_index = atoi(index)-1;
if (l_index >MaxRefuseCall-1 || l_index <0) {
WinPrintf("ReadGCARefuseCall()错误:index(%d) > MaxRefuseCall(%d)",l_index,MaxRefuseCall);
ReleaseLock(hlock);
return NULL;
}
//打开GCA文件
hMap=::OpenFileMapping(FILE_MAP_WRITE,FALSE, GlobalCommuAreaName);
if (hMap == NULL) {
::MessageBox(NULL, "打开全局共享区(GCA)出错!", "DLL message", MB_OK);
ReleaseLock(hlock);
return NULL;
}
//获得GCA内存地址的指针
p_Map = MapViewOfFile(hMap,FILE_MAP_WRITE ,0,0,0);
if (p_Map == NULL) {
::MessageBox(NULL, "SetGCAREFUSECALL():p_Map is NULL!","DLL message", MB_OK);
ReleaseLock(hlock);
return NULL;
}
pGCA = (GCA *)p_Map;
if (pGCA == NULL) {
::MessageBox(NULL, "SetGCAREFUSECALL():p_Sem is NULL!", "DLL message",MB_OK);
ReleaseLock(hlock);
return NULL;
}
p_result = &(pGCA->RefuseCall[l_index]);
CloseHandle(hMap);
ReleaseLock(hlock);
return p_result;
}
/************************************************************
* NAME: GetPortNumber()
* DESCRIPTION: 返回语音卡端口个数
*
************************************************************/
extern "C" _declspec ( dllexport ) int GetPortNumber()
{
char snum[20];
int num;
strcpy(snum,(const char *)ReadGCA("ChannelNumber"));
num = atoi(snum);
return num;
}
/************************************************************
* NAME: GetScreenShowWindow()
* DESCRIPTION: 返回显示程序(即主控程序)的窗口句柄
*
************************************************************/
extern "C" _declspec ( dllexport ) HWND GetScreenShowWindow()
{
char WinName[256];
char *pClass;
pClass = NULL;
//获得主控窗口名
//strcpy(WinName,(const char *)ReadGCA("ControlAppName"));
strcpy(WinName,TheControlAppName);
//主控程序没有启动,或读GCA出错
if (WinName == NULL) {
return NULL;
}
return FindWindow(pClass,WinName);
}
/************************************************************
* NAME: GetDataServerWindow()
* DESCRIPTION: 返回数据服务程序(即数据库访问程序)的窗口句柄
*
************************************************************/
extern "C" _declspec ( dllexport ) HWND GetDataServerWindow()
{
char WinName[256];
char *pClass;
pClass = NULL;
//获得主控窗口名
//strcpy(WinName,(const char *)ReadGCA("DBServerAppName"));
strcpy(WinName,TheServerAppName);
//主控程序没有启动,或读GCA出错
if (WinName == NULL) {
return NULL;
}
return FindWindow(pClass,WinName);
}
/************************************************************
* NAME: GetDataClientWindow()
* DESCRIPTION: 返回数据请求程序(即语音服务程序)的窗口句柄
*
************************************************************/
extern "C" _declspec ( dllexport ) HWND GetDataClientWindow()
{
char WinName[256];
char *pClass;
pClass = NULL;
//获得主控窗口名
//strcpy(WinName,(const char *)ReadGCA("DBClientAppName"));
strcpy(WinName,TheClientAppName);
//主控程序没有启动,或读GCA出错
if (WinName == NULL) {
return NULL;
}
return FindWindow(pClass,WinName);
}
/************************************************************
* NAME: GetCuiJiaoWindow()
* DESCRIPTION: 返回数据请求程序(即语音服务程序)的窗口句柄
*
************************************************************/
extern "C" _declspec ( dllexport ) HWND GetCuiJiaoWindow()
{
char WinName[256];
char *pClass;
pClass = NULL;
//获得主控窗口名
//strcpy(WinName,(const char *)ReadGCA("DBClientAppName"));
strcpy(WinName,TheCuiJiaoAppName);
//主控程序没有启动,或读GCA出错
if (WinName == NULL) {
return NULL;
}
return FindWindow(pClass,WinName);
}
/*****************************************************************************************
函数 : int DiskGCA(char * diskfile)
说明 :将GCA写入磁盘文件
diskfile : 磁盘文件名
****************************************************************************/
extern "C" _declspec ( dllexport ) int PASCAL DiskGCA(char * diskfile)
{
HANDLE hMap;
LPVOID p_Map;
OFSTRUCT ofstruct;
OFSTRUCT * pof;
HANDLE hdisk;
DWORD bytes,p_bytes;
GCA * pGCA;
int i;
char msg[TXT_LEN];
HANDLE hlock; //共享锁
//等待共享文件被释放,然后抢占并琐定
hlock = WaitLock(MUTEX_GCA);
pof = &(ofstruct);
hMap=::OpenFileMapping(FILE_MAP_WRITE,FALSE, GlobalCommuAreaName);
if (hMap == NULL) {
::MessageBox(NULL, "DiskGCA():打开全局共享区(GCA)出错!", "DLL message", MB_OK);
ReleaseLock(hlock);
return NULL;
}
p_Map = MapViewOfFile(hMap,FILE_MAP_WRITE ,0,0,0);
//转换成sempahore指针
pGCA = (GCA *)p_Map;
hdisk = CreateFile(diskfile,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hdisk==INVALID_HANDLE_VALUE){
::MessageBox(NULL, "DiskGCA():创建GCA磁盘映像文件出错!", "DLL message", MB_OK);
CloseHandle(hMap);
ReleaseLock(hlock);
return NULL;
}
sprintf(msg, ".ChannelNumber=[%s]\n", pGCA->ChannelNumber);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".SemaphoreName=[%s]\n", pGCA->SemaphoreName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".SQLCommandName=[%s]\n", pGCA->SQLCommandName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".SQLResultName=[%s]\n", pGCA->SQLResultName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".ControlAppName=[%s]\n", pGCA->ControlAppName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".DBServerAppName=[%s]\n", pGCA->DBServerAppName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".DBClientAppName=[%s]\n", pGCA->DBClientAppName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".CuiJiaoAppName=[%s]\n", pGCA->CuiJiaoAppName);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".StartQueryMonth=[%s]\n", pGCA->StartQueryMonth);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".EndQueryMonth=[%s]\n", pGCA->EndQueryMonth);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".CurQfTable=[%s]\n", pGCA->CurQfTable);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
////////////////
sprintf(msg, ".Log_Utpt=[%s]\n", pGCA->Log_Utpt);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".InitStatus=[%s]\n", pGCA->InitStatus);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".InitHide=[%s]\n", pGCA->InitHide);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".VFIT_LEN=[%s]\n", pGCA->VFIT_LEN);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".vox_path=[%s]\n", pGCA->vox_path);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
sprintf(msg, ".txt=[%s]\n", pGCA->txt);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
for (i=0; i<MaxRefuseCall; i++){
sprintf(msg, ".RefuseCall[%d]=[%s]\n", i, pGCA->RefuseCall[i]);
bytes = strlen(msg);
if(WriteFile(hdisk, msg, bytes, &p_bytes,NULL)==0) {
//::MessageBox(NULL, "写磁盘映像文件出错", "DLL message", MB_OK);
}
}
CloseHandle(hdisk);
CloseHandle(hMap);
ReleaseLock(hlock);
return 1;
}
/**********************************************************************************************
*
*
* 查询语法结构区操作函数
*
*
**********************************************************************************************/
/***************************************************************
*
* 函数 int CreateQSSA()
* 说明:在内存中创建查询语法结构区
*
***************************************************************/
extern "C" _declspec ( dllexport ) int PASCAL CreateQSSA()
{
HANDLE hMap; //内存文件句柄
QSSA * pQSSA;
LPVOID p_Map;
int i;
hMap = CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0, sizeof(QSSA)*MaxQueryDemand,QuerySyntaxStructAreaName);
if (hMap != NULL) { //文件创建成功
if(GetLastError() == ERROR_ALREADY_EXISTS) {
//::MessageBox(NULL, "查询语法结构区(QSSA)已经存在!", "DLL message", MB_OK);
}
else{
//::MessageBox(NULL, "查询语法结构区(QSSA)已成功创建!", "DLL message", MB_OK);
// 创建成功,进行初始化...(active = 'N', str ='')
p_Map = MapViewOfFile(hMap,FILE_MAP_WRITE ,0,0,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -