关于C++(MFC)Socket通讯

1、SocketUtil.h

// Socket函数头文件
// add by jzh 2011-04-06

#ifndef SocketUtil
#define SocketUtil
#include <windows.h>

// 创建连接,被用于CreateServerSocket、ConnectServer的初始化。
BOOL CreateSocket(DWORD dwReadTimeOut, DWORD dwSendTimeOut, DWORD &dwSocketHandle);

// 关闭连接
void CloseSocket(DWORD &dwSocketHandle);

// 创建服务端监听
BOOL CreateServerSocket(DWORD dwPortNumber, DWORD dwReadTimeOut, DWORD dwSendTimeOut, DWORD &dwSocketHandle);

// 接收客户端
BOOL AcceptClient(DWORD dwServerSocket, DWORD &dwClientSocket, LPSTR pszClientIP, DWORD dwSize);

// 连接服务端
BOOL ConnectServer(LPCSTR pszServerIP, DWORD dwPortNumber, DWORD dwReadTimeOut, DWORD dwSendTimeOut, DWORD &dwClientSocket);

// 接收数据
BOOL SocketRead(DWORD dwSocket, BYTE *pBuffer, DWORD &dwSize);
    
// 发送数据
BOOL SocketWrite(DWORD dwSocket, const BYTE *pBuffer, DWORD dwSize);

#endif

2、SocketUtil.cpp 阅读全文

关于C++(MFC)注册ocx控件、卸载函数入口定义

// 注册、卸载函数入口定义
typedef long (__stdcall *RegProc)();

// 注册ocx控件
BOOL RegisterOcx(CString sFile);

// 卸载ocx控件
BOOL UnRegisterOcx(CString sFile);


// ------------------------------------------------------------------
// 注册ocx控件
// add by jzh 2009-08-11
// ------------------------------------------------------------------
BOOL CommFunc::RegisterOcx(CString sFile)
{ 
    BOOL bResult = FALSE;
    HMODULE hModule = LoadLibrary(sFile);
    //获得注册函数地址
    RegProc DLLRegisterServer = (RegProc)GetProcAddress(hModule,"DllRegisterServer");
    if (DLLRegisterServer != NULL)
    {
        long regResult = DLLRegisterServer();
    bResult = (regResult == NOERROR);
    }
    FreeLibrary(hModule);
    return bResult;
}

// ------------------------------------------------------------------
// 卸载ocx控件
// add by jzh 2009-08-11
// ------------------------------------------------------------------
BOOL CommFunc::UnRegisterOcx(CString sFile)
{ 
    BOOL bResult = FALSE;
    HMODULE hModule = LoadLibrary(sFile);
    //获得卸载函数地址
    RegProc DLLUnregisterServer = (RegProc)GetProcAddress(hModule, "DllUnregisterServer");
    if (DLLUnregisterServer != NULL)
    {
        long regResult = DLLUnregisterServer();
        bResult = (regResult == NOERROR);
    }
    FreeLibrary(hModule);
    return bResult;
} 

关于C++(MFC)日期函数

// 获取日期 年-月-日 10位
CString GetYMD10();

// 获取日期 年月日 8位
CString GetYMD8();

// 获取时间 8位
CString GetCurTime8();

// 获取时间 6位
CString GetCurTime6();

// 获取日期时间 19位
CString GetCurDateTime19();

// 获取日期时间 14位
CString GetCurDateTime14();

// ------------------------------------------------------------------
// 获取日期 年月日 10位
// add by jzh 2009-07-13
// ------------------------------------------------------------------
CString CommFunc::GetYMD10()
{
    CTime tCurTime = CTime::GetCurrentTime(); 
  CString sTemp = tCurTime.Format("%Y-%m-%d");
  return sTemp;
}

// ------------------------------------------------------------------
// 获取日期 年月日 8位
// add by jzh 2009-07-13
// ------------------------------------------------------------------
CString CommFunc::GetYMD8()
{
    CTime tCurTime = CTime::GetCurrentTime(); 
  CString sTemp = tCurTime.Format("%Y%m%d");
  return sTemp;
}

// ------------------------------------------------------------------
// 获取时间 8位
// add by jzh 2009-07-13
// ------------------------------------------------------------------
CString CommFunc::GetCurTime8()
{
    CTime tCurTime = CTime::GetCurrentTime(); 
  CString sTemp = tCurTime.Format("%H:%M:%S");
  return sTemp;
}

// ------------------------------------------------------------------
// 获取时间 6位
// add by jzh 2009-07-13
// ------------------------------------------------------------------
CString CommFunc::GetCurTime6()
{
    CTime tCurTime = CTime::GetCurrentTime(); 
  CString sTemp = tCurTime.Format("%H%M%S");
  return sTemp;
}

// ------------------------------------------------------------------
// 获取日期时间 19位
// add by jzh 2009-07-13
// ------------------------------------------------------------------
CString CommFunc::GetCurDateTime19()
{
    CTime tCurTime = CTime::GetCurrentTime(); 
  CString sTemp = tCurTime.Format("%Y-%m-%d %H:%M:%S");
  return sTemp;
}

// ------------------------------------------------------------------
// 获取日期时间 14位
// add by jzh 2009-07-13
// ------------------------------------------------------------------
CString CommFunc::GetCurDateTime14()
{
    CTime tCurTime = CTime::GetCurrentTime(); 
  CString sTemp = tCurTime.Format("%Y%m%d%H%M%S");
  return sTemp;
}

关于C++(MFC)使用ADO连接SQL Server数据库

1、DbHelper.h

// 数据库辅助函数头文件
// add by jzh 2009-07-06
#pragma once

class DbHelper
{
public:
  // 定义ADO连接变量指针
  _ConnectionPtr m_pConnection;
  // 命令变量指针
  _CommandPtr m_pCommand;
  // 记录集变量指针
  _RecordsetPtr m_pRecordset;
public:
  DbHelper(void);
  ~DbHelper(void);

  // 初始化连接数据库
  void InitConn();       
  // 执行查询
  _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);  
  // 执行SQL语句 Insert Update
  BOOL ExecuteSQL(_bstr_t bstrSQL);
  // 获取流水号
  CString GetSerialNo(CString sTableName, CString sDataType, CString sBillType, CString sFormat);    
  // 释放资源
  void ExitConn();                                   
};

2、DbHelper.cpp 阅读全文

关于C++(MFC)返回字符串分割后的数组

// 返回字符串分割后的数组 
void DecodeCString(CString sSource, CStringArray &arrDest, char cDivision);

// ------------------------------------------------------------------
// 返回字符串分割后的数组
// add by jzh 2009-07-06
// ------------------------------------------------------------------
void CommFunc::DecodeCString(CString sSource, CStringArray &arrDest, char cDivision)
{
  arrDest.RemoveAll();
  int nCount = 0;
  for(int i=0; i< sSource.GetLength(); i++)
  {
    if(sSource.GetAt(i) == cDivision)
    {
      nCount=i;
      arrDest.Add(sSource.Left(i)); //去掉右边
      int nIndex = arrDest.GetSize()-1;
      for(int j=0;j <nIndex;j++)
      {
        arrDest[nIndex] = arrDest[nIndex].Right(arrDest[nIndex].GetLength() - arrDest[j].GetLength()-1); //去掉左边
        //TRACE0(arrDest[nIndex]+"\n"); //输出调试信息
      }
    }
  }

  //处理最后一个分隔符cDivision右边的剩余部分
  arrDest.Add(sSource);
  int nIndex2 = arrDest.GetSize()-1;
  for(int j=0;j <nIndex2; j++)
  {
    arrDest[nIndex2] = arrDest[nIndex2].Right(arrDest[nIndex2].GetLength() - arrDest[j].GetLength()-1); //去掉左边
    //TRACE0(arrDest[nIndex2]+"\n"); //输出调试信息
  }
}

关于C++(MFC)写入TXT文件

// 写入TXT文件
void WriteToText(CString sFileFullPathName, CString sLine);

// 读取TXT文件
CString ReadFromText(CString sFileFullPathName);


// ------------------------------------------------------------------
// 写入TXT文件
// add by jzh 2009-07-06
// ------------------------------------------------------------------
void CommFunc::WriteToText(CString sFileFullPathName, CString sLine)
{
  CStdioFile file; 
  int iFlag;
  if (FileIsExist(sFileFullPathName))
  {
      iFlag = 0;
  }
  else
  {
      iFlag = 1;
  }

  if (iFlag == 0)
  {
    file.Open(_T(sFileFullPathName), CFile::modeReadWrite); 
  }
  else
  {
      file.Open(_T(sFileFullPathName), CFile::modeCreate|CFile::modeReadWrite);
  }
    file.SeekToEnd();
  file.WriteString(sLine); 
  file.Close(); 
}

// ------------------------------------------------------------------
// 读取TXT文件
// add by jzh 2009-07-20
// ------------------------------------------------------------------
CString CommFunc::ReadFromText(CString sFileFullPathName)
{
  CString sLine;
  CString sReturn; 
  sLine = ""; 
    sReturn = "";

  if (!FileIsExist(sFileFullPathName))
  {
    MessageBox(NULL, "文件不存在", TEXT("提示"), MB_OK);
    return "";
  }

  CStdioFile file; 
    file.Open(sFileFullPathName, CFile::modeRead); //打开文件 只读模式 

  while(file.ReadString(sLine))  //一次读取一行 
  { 
    sReturn += sLine;
  } 
    file.Close(); //关闭文件
  return sReturn;
}

关于C++(MFC)获取指定文件夹下的所有文件列表

// 获取指定文件夹下的所有文件列表
void GetFilePath(CString sPath, CStringList *pstrNameList);

// ------------------------------------------------------------------
// 获取指定文件夹下的所有文件列表
// add by jzh 2009-07-06
// ------------------------------------------------------------------
void CommFunc::GetFilePath(CString sPath, CStringList *psNameList)
{
    CFileFind ff;        //定义一个CfileFind对象
  //BOOL bFlag;
  sPath = sPath + "*.*";
  if (!ff.FindFile(sPath))  //打开以sPath为目标的文件查询,并检查调用是否成功
  {
        return;
  }
  else
  {
    // FindNextFile()的注意漏掉最后一项
    while (ff.FindNextFile()) //查找下个文件
    {
      //if (ff.IsDots())
        //continue;
      if (!ff.IsDots() && ff.IsDirectory())
      {
        CString sTemp;
        int iIndex;
        sTemp = ff.GetFilePath(); //取到目录的全路径
        if (sTemp.Right(1) != "\\")
          sTemp += "\\";
        iIndex = sPath.ReverseFind('\\'); 
        sTemp += sPath.Right(sPath.GetLength() - iIndex - 1); //生成路径  
        GetFilePath(sTemp, psNameList); //递归调用函数
      }
      else if(!ff.IsDots() && !ff.IsDirectory())
      {
        psNameList->AddTail(ff.GetFilePath()); //加入文件列表
        //MessageBox(NULL, ff.GetFilePath(), TEXT("提示"), MB_OK);
      }
    }

    // 当得到最后一个文件时再进行FindNextFile()必然返回0
    // psNameList里面无法获得最后一项文件名
    // 所以再判断一次
    if (!ff.IsDots() && ff.IsDirectory())
    {
      CString sTemp;
      int iIndex;
      sTemp = ff.GetFilePath(); //取到目录的全路径
      if (sTemp.Right(1) != "\\")
        sTemp += "\\";
      iIndex = sPath.ReverseFind('\\'); 
      sTemp += sPath.Right(sPath.GetLength() - iIndex - 1); //生成路径  
      GetFilePath(sTemp, psNameList); //递归调用函数
    }
    else if(!ff.IsDots() && !ff.IsDirectory())
    {
      psNameList->AddTail(ff.GetFilePath()); //加入文件列表
      //MessageBox(NULL, ff.GetFilePath(), TEXT("提示"), MB_OK);
    }
  }
  ff.Close();
}

关于C++(MFC)执行外部EXE

// 执行外部EXE
void RunAppToExit(CString sAppPath, CString sPara, int iWaitFlag, int iShowFlag);

// ------------------------------------------------------------------
// 执行外部EXE
// add by jzh 2009-07-05
// ------------------------------------------------------------------
void CommFunc::RunAppToExit(CString sAppPath, CString sPara, int iWaitFlag, int iShowFlag)
{
   SHELLEXECUTEINFO exeInfo;
   exeInfo.cbSize = sizeof(SHELLEXECUTEINFO);
   exeInfo.fMask = SEE_MASK_NOCLOSEPROCESS;               //设置为SellExecuteEx函数结束后进程退出
   exeInfo.hwnd = NULL;
   exeInfo.lpVerb = "open";                               //执行动作为“打开执行”
   exeInfo.lpFile = (LPCTSTR) sAppPath;                   //执行程序文件全路径名称
   exeInfo.lpParameters = (LPCTSTR) sPara;                //执行参数
   exeInfo.lpDirectory = NULL;
   exeInfo.nShow = iShowFlag;                             //SW_SHOWNORMAL 1
   exeInfo.hInstApp = NULL;
   exeInfo.lpIDList = NULL;
   exeInfo.lpClass = NULL;
   exeInfo.hkeyClass = NULL;
   exeInfo.dwHotKey = NULL;
   exeInfo.hMonitor = NULL;
   exeInfo.hIcon = NULL;
   exeInfo.hProcess = NULL;
   
   ::ShellExecuteEx(&exeInfo);
   if (iWaitFlag = 0) 
   {
       if(exeInfo.hProcess)
       {
           ::WaitForSingleObject(exeInfo.hProcess,INFINITE);
           ::CloseHandle(exeInfo.hProcess);
       } 
   }
}

关于C++(MFC)获取EXE执行文件所在的路径

// 获取EXE执行文件所在的路径
CString GetExePath();

// ------------------------------------------------------------------
// 获取EXE执行文件所在的路径
// add by jzh 2009-07-05
// ------------------------------------------------------------------
CString CommFunc::GetExePath()   
{   
  CString sExePath;   
  GetModuleFileName(NULL, sExePath.GetBuffer(MAX_PATH), MAX_PATH);   
  sExePath.ReleaseBuffer();   
  sExePath = sExePath.Left(sExePath.ReverseFind(_T('\\')));   //返回此CString对象中与要求的字符匹配的最后一个字符的索引;如果没有找到需要的字符则返回-1。
  return sExePath;   
}

关于C++(MFC)全局变量

1、stdafx.cpp

// stdafx.cpp : 只包括标准包含文件的源文件
// ProCApp.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息

#include "stdafx.h"

CString g_sExePath;         // Exe执行路径
CString g_sSysFlag;         // 系统标志位
CString g_sSysVersion;      // 系统版本
CString g_sDBFlag;          // 数据库类型0 Access 1 SQLServer 2 Oracle

CString g_sDBServerIP;      // SQLServer数据库服务器
CString g_sDataBase;        // SQLServer数据库名称
CString g_sUserName;        // SQLServer用户帐号
CString g_sPassword;        // SQLServer用户密码

CString g_sAccessFile;      // 数据库类型为Access的数据库文件

CString g_sOraDataSource;   // Oracle数据库服务名称
CString g_sOraUser;         // Oracle用户帐号
CString g_sOraPWD;          // Oracle用户密码

CString g_sFtpIP;           // Ftp服务器
CString g_sFtpPort;         // Ftp端口
CString g_sFtpUser;         // Ftp用户帐号
CString g_sFtpPWD;          // Ftp用户密码

2、stdafx.h 阅读全文