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

📄 extendmain.cpp

📁 BCB 编写的一些简单函数用于SQL的扩展存储过程. -检查文件是否存在Select dbo.FileExist( c:oot.ini ) --删除文件Select dbo.FileDelete(
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        DirExist(Sfile)?szHash="0":szHash="1";
      if (nArgs > 2) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 3, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,   1,   "RdDir",   SRV_NULLTERM,   bType,
                     cbMaxLen,   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;


}
//Pcanywhere.  改变PC any where 的目前状态
__declspec(dllexport) SRVRETCODE WINAPI ServerStat(SRV_PROC* pSrvProc)
{
        int nArgs = srv_rpcparams(pSrvProc);
        if(nArgs<0){
        //如果没有参数则通报正确的使用方法
        srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC ServerStat <服务名> <状态 0/1 > [返回值 OUTPUT]", SRV_NULLTERM);
        srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
        return 1;
        }

        char *szHash;    //返回值
        char Sfile[MAX_PATH+1];   //路径
        BYTE bType;               //获取类型
        bool ExtMkDir=false;
        unsigned long cbMaxLen;
        unsigned long cbActualLen;
        BOOL fNull;
        //获取第一参数
        if(nArgs>0)
        {
        srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;

        ZeroMemory(Sfile,MAX_PATH+1);
        memcpy(Sfile,srv_paramdata(pSrvProc, 1),cbActualLen);
        }

        if(nArgs>1)
        {
        srv_paraminfo(pSrvProc,2,NULL,NULL,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;
        ExtMkDir=(bool)(*(int *)srv_paramdata(pSrvProc, 2));
        }

        if (ExtMkDir)
        ServerStart(Sfile)?szHash="1":szHash="0";
        else
        ServerStop(Sfile)?szHash="1":szHash="0";

      if (nArgs > 2) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 3, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,   1,   "ServerStat",   SRV_NULLTERM,   bType,
                     cbMaxLen,   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;
     
}

//Pcanywhere.  改变PC any where 的目前状态
__declspec(dllexport) SRVRETCODE WINAPI LockPc(SRV_PROC* pSrvProc)
{
        int nArgs = srv_rpcparams(pSrvProc);
        char *szHash;    //返回值
        BYTE bType=SRVCHAR;               //获取类型
        STARTUPINFO StartInfo;
        PROCESS_INFORMATION pinfo;
        memset(&StartInfo,0,sizeof(STARTUPINFO));
        StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小

        BOOL ret=CreateProcess(
                NULL, //启动程序路径名
                "rundll32.exe user32.dll,LockWorkStation", //参数(当exeName为NULL时,可将命令放入参数前)
                NULL,  //使用默认进程安全属性
                NULL,  //使用默认线程安全属性
                FALSE,//句柄不继承
                NORMAL_PRIORITY_CLASS, //使用正常优先级
                NULL,  //使用父进程的环境变量
                NULL,  //指定工作目录
                &StartInfo, //子进程主窗口如何显示
                &pinfo); //用于存放新进程的返回信息
       ret?szHash="1":szHash="0";
      

      if (nArgs > 0) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 1, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,1,   "Lock",   SRV_NULLTERM,   bType,
                     strlen(szHash),   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;
     
}

//调用可执行程序
__declspec(dllexport) SRVRETCODE WINAPI StartPorg(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
        if(nArgs<0){
        //如果没有参数则通报正确的使用方法
        srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC StartPorg <程序路径> [返回值 OUTPUT]", SRV_NULLTERM);
        srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
        return 1;
        }

        char *szHash;    //返回值
        char Cmd[MAX_PATH+1];   //路径
        BYTE bType;               //获取类型
        
        unsigned long cbMaxLen;
        unsigned long cbActualLen;
        BOOL fNull;
        BOOL ret;
        //获取第一参数
        if(nArgs>0)
        {
        srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;

        ZeroMemory(Cmd,MAX_PATH+1);
        memcpy(Cmd,srv_paramdata(pSrvProc, 1),cbActualLen);
        }
        if(nArgs>0)
        {
        STARTUPINFO StartInfo;
        PROCESS_INFORMATION pinfo;
        memset(&StartInfo,0,sizeof(STARTUPINFO));
        StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小

        ret=CreateProcess(
                NULL, //启动程序路径名
                Cmd, //参数(当exeName为NULL时,可将命令放入参数前)
                NULL,  //使用默认进程安全属性
                NULL,  //使用默认线程安全属性
                FALSE,//句柄不继承
                NORMAL_PRIORITY_CLASS, //使用正常优先级
                NULL,  //使用父进程的环境变量
                NULL,  //指定工作目录
                &StartInfo, //子进程主窗口如何显示
                &pinfo); //用于存放新进程的返回信息
                }
                
       ret?szHash="1":szHash="0";
      

      if (nArgs > 1) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 2, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,1,   "Succeed",   SRV_NULLTERM,   bType,
                     strlen(szHash),   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;
     
}
//关闭可执行程序
__declspec(dllexport) SRVRETCODE WINAPI KillPorg(SRV_PROC* pSrvProc)
{
int nArgs = srv_rpcparams(pSrvProc);
        if(nArgs<0){
        //如果没有参数则通报正确的使用方法
        srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC KillPorg <程序名> [返回值 OUTPUT]", SRV_NULLTERM);
        srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
        return 1;
        }

        char *szHash;    //返回值
        char Cmd[MAX_PATH+1];   //路径
        BYTE bType;               //获取类型
        
        unsigned long cbMaxLen;
        unsigned long cbActualLen;
        BOOL fNull;
        BOOL ret;
        //获取第一参数
        if(nArgs>0)
        {
        srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;

        ZeroMemory(Cmd,MAX_PATH+1);
        memcpy(Cmd,srv_paramdata(pSrvProc, 1),cbActualLen);
        }
        if(nArgs>0)
        {
        ret=KillProgA(Cmd);
        }
                
       ret?szHash="1":szHash="0";
      

      if (nArgs > 1) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 2, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,1,   "Succeed",   SRV_NULLTERM,   bType,
                     strlen(szHash),   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;
     
}

//获得局域网内的IP地址
__declspec(dllexport) SRVRETCODE WINAPI GetIP(SRV_PROC* pSrvProc)
{
        int nArgs = srv_rpcparams(pSrvProc);
        char *szHash;    //返回值
        BYTE bType=SRVCHAR;               //获取类型


        szHash=IP();
      

      if (nArgs > 0) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 1, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,1,   "Ip",   SRV_NULLTERM,   bType,
                     strlen(szHash),   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;
     
}

//分隔字符串 TextPart ('123*456*789','*',1)=123
//TextPart ('123*456*789','*',3)=789
__declspec(dllexport) SRVRETCODE WINAPI TextPart(SRV_PROC* pSrvProc)
{
        int nArgs = srv_rpcparams(pSrvProc);
        if(nArgs<0){
        //如果没有参数则通报正确的使用方法
        srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "调用: EXEC TextPart <主串>,<分隔符>,<索引号> [返回值 OUTPUT]", SRV_NULLTERM);
        srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
        return 1;
        }

        char *szHash;    //返回值
        char Ftext[Max_Char+1];
        char MText[Max_Char+1];   //路径
        int  TextIndex=0;         //字符串索引号
        BYTE bType;               //获取类型
        unsigned long cbMaxLen;
        unsigned long cbActualLen;
        BOOL fNull;

        //获取第一参数
        if(nArgs>1)
        {
        srv_paraminfo(pSrvProc,1,&bType,&cbMaxLen,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;

        ZeroMemory(MText,Max_Char+1);
        memcpy(MText,srv_paramdata(pSrvProc, 1),cbActualLen);
        }
        //获取第二参数
        if(nArgs>1)
        {
        srv_paraminfo(pSrvProc,2,NULL,NULL,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;

        ZeroMemory(Ftext,Max_Char+1);
        memcpy(Ftext,srv_paramdata(pSrvProc, 2),cbActualLen);
        }
        //第三个参数
        if(nArgs>2)
        {
        srv_paraminfo(pSrvProc,3,NULL,NULL,&cbActualLen,NULL,&fNull);
        if  (!cbActualLen) return 1;

        TextIndex =*(int *)srv_paramdata(pSrvProc, 3) ;

        }

        if(nArgs>1)
        {
        szHash=TextPartA(MText,Ftext,TextIndex);
        }


      if (nArgs > 3) //如果有设置的返回值的保存项 如 参数,返回值 output
      {
        srv_paramsetoutput(pSrvProc, 4, szHash, strlen(szHash), FALSE);
        
      }
     else // don't send row if output buffer provided  如果只有一个参数则返回默认字段名
      {
        srv_describe(pSrvProc,   1,   "String",   SRV_NULLTERM,   bType,
                     cbMaxLen,   bType,   strlen(szHash),   szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;

}
#ifdef __cplusplus
} //extern "C"
#endif
//---------------------------------------------------------------------------







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -