(1)合并PcCortr.DLL和PcClient.DLL
(2)将PcClient里的SshWork类和PcCortr里的MyMainTrans合并为PsMainTrans类,实现上线功能
(3)用自定义CFile类代替PcCortr里用到的MFC的CFile类,改造MyAdminTrans和文件相关函数里使用的MFC类,改为SDK
(4)去除不必要的功能,简化服务端

附CFile实现:

#pragma once

#include <fcntl.h> // filecontrol : _O_RDONLY symbol and other stuff
#include <tchar.h> // _fgetts ==> fgets
#include <stdio.h>
#include <io.h>
#include <windows.h>

class CFile
{
// Members
protected:
UINT   m_hFile; // handle to actual file (created by ::CreateFile WIN32 API)
BOOL   m_bCloseOnDelete;
UINT        m_FileLen;

public:
// Flag values
enum OpenFlags {
   modeRead =          0x0000,
   modeWrite =         0x0001,
   modeReadWrite =     0x0002,
   shareCompat =       0x0000,
   shareExclusive =    0x0010,
   shareDenyWrite =    0x0020,
   shareDenyRead =     0x0030,
   shareDenyNone =     0x0040,
   modeNoInherit =     0x0080,
   modeCreate =        0x1000,
   modeNoTruncate =    0x2000,
   typeText =          0x4000, // typeText and typeBinary are used in
   typeBinary =   (int)0x8000 // derived classes only
   };

enum SeekPosition {
   begin = 0x0,
   current = 0x1,
   end = 0x2 };

enum { hFileNull = -1 };

// Constructor/Destructor
public:
CFile()
{
   m_hFile = (UINT) hFileNull;
   m_bCloseOnDelete = FALSE;
   m_FileLen = 0;
}
~CFile()
{
   if (m_hFile != (UINT)hFileNull && m_bCloseOnDelete)
    Close();
}

// Methods
public:
BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags)
{
   // CFile objects are always binary and CreateFile does not need flag
   nOpenFlags &= ~(UINT)typeBinary;

m_bCloseOnDelete = FALSE;
   m_hFile = (UINT)hFileNull;

// map read/write mode
   DWORD dwAccess = 0;
   switch (nOpenFlags & 3)
   {
    case modeRead:
     dwAccess = GENERIC_READ;
     break;
    case modeWrite:
     dwAccess = GENERIC_WRITE;
     break;
    case modeReadWrite:
     dwAccess = GENERIC_READ|GENERIC_WRITE;
     break;
    default:
     ; // invalid share mode
   }

// map share mode
   DWORD dwShareMode = 0;
   switch (nOpenFlags & 0x70)    // map compatibility mode to exclusive
   {
    default:
     ; // invalid share mode?
    case shareCompat:
    case shareExclusive:
     dwShareMode = 0;
     break;
    case shareDenyWrite:
     dwShareMode = FILE_SHARE_READ;
     break;
    case shareDenyRead:
     dwShareMode = FILE_SHARE_WRITE;
     break;
    case shareDenyNone:
     dwShareMode = FILE_SHARE_WRITE|FILE_SHARE_READ;
     break;
   }

// map modeNoInherit flag
   SECURITY_ATTRIBUTES sa;
   sa.nLength = sizeof(sa);
   sa.lpSecurityDescriptor = NULL;
   sa.bInheritHandle = (nOpenFlags & modeNoInherit) == 0;

// map creation flags
   DWORD dwCreateFlag;
   if (nOpenFlags & modeCreate)
   {
    if (nOpenFlags & modeNoTruncate)
     dwCreateFlag = OPEN_ALWAYS;
    else
     dwCreateFlag = CREATE_ALWAYS;
   }
   else
    dwCreateFlag = OPEN_EXISTING;

// attempt file creation
   HANDLE hFile = ::CreateFile(lpszFileName, dwAccess, dwShareMode, &sa,
    dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);
   if (hFile == INVALID_HANDLE_VALUE)
    return FALSE;

m_hFile = (HFILE)hFile;
   m_bCloseOnDelete = TRUE;

return TRUE;
}

LONG Seek( LONG lOff, UINT nFrom )
{
   if (m_hFile == (UINT)hFileNull) return 0;

return ::SetFilePointer((HANDLE)m_hFile, lOff, NULL, (DWORD)nFrom);
}

DWORD SeekToBegin()
{
   return Seek(0,CFile::begin);
}
DWORD SeekToEnd()
{
   return Seek(0, CFile::end);
}

UINT Read(void* lpBuf, UINT nCount)
{
   if (nCount == 0) return 0;   // avoid Win32 "null-read"

DWORD dwRead = 0;
  
   ::ReadFile((HANDLE)m_hFile, lpBuf, nCount, &dwRead, NULL);

return (UINT)dwRead;
}

void Write( const void* lpBuf, UINT nCount )
{
   if (m_hFile == (UINT)hFileNull) return;

if (nCount == 0)
    return;     // avoid Win32 "null-write" option

DWORD nWritten;
     ::WriteFile((HANDLE)m_hFile, lpBuf, nCount, &nWritten, NULL);
   m_FileLen +=nWritten;
}

void Flush()
{
   if (m_hFile == (UINT)hFileNull) return;

::FlushFileBuffers((HANDLE)m_hFile);
}

void Close()
{
   if (m_hFile != (UINT)hFileNull)
    ::CloseHandle((HANDLE)m_hFile);

m_hFile = (UINT) hFileNull;
   m_bCloseOnDelete = FALSE;
}

UINT GetLength()
{
   return m_FileLen;
}
};

PcShare服务端改造相关推荐

  1. 单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造

    单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 参考文章: (1)单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 (2)https://www.cnblogs.com/ ...

  2. vue项目转换服务器端渲染,vue-server-renderer实现vue项目改造服务端渲染

    这是一篇教程,从创建项目到改造项目 vue-cli创建一个项目 在放你做demo的地方,创建一个项目 vue create vue-ssr // 如果你安装了vue-cli4,选择vue2的版本,以下 ...

  3. vue2-ssr从vue-cli搭建项目改造服务端渲染+打包上线部署

    为了完成vue+ssr,本人呕心沥血翻阅很多博主的文档,并在b站看了很多视频之后,经过个人实践,终于整理出一套完整版,无缺失,不报错的改造流程(亲测!!) 从创建=>打包=>上线部署,详细 ...

  4. 聊一聊 Java 服务端中的乱象

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿里巴巴中间件 查尔斯·狄更斯在<双城记>中写道 ...

  5. 那些年,我们见过的 Java 服务端乱象

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Photo by The Book Tutor @Youtube 文 | 陈昌毅 导读 查尔斯 ...

  6. Linux服务端最大并发数是多少?

    1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正常配置的服务器物理机最大并发数可以到多少? 说说你的理解和分析. 思考几分钟,如果你可以有理有据 ...

  7. 从编程小白到全栈开发:基于框架开发服务端

    上文中,我们了解了关于服务器端的一些概念知识,尤其是HTTP协议相关的最基本知识点,今天我想跟大家分享一下在平时正真的开发中,是如何来利用和体现这些内容的. 还记得我在<从编程小白到全栈开发:改 ...

  8. 十几万人同时在线的直播间聊天,如何设计服务端架构?

    问题 以下内容源自oschina的一篇讨论帖: 问题:这是在知乎上看到的关于如何搭建视频直播系统时想到的一个问题,在此不考虑其他直播上的问题,仅考虑聊天系统,一个热门视频直播间人数可能达到几十万人,一 ...

  9. markdownpad2 html渲染组件出错_「万字长文」一文吃透React SSR服务端同构渲染

    写在前面 前段时间一直在研究 react ssr技术,然后写了一个完整的 ssr开发骨架.今天写文,主要是把我的研究成果的精华内容整理落地,另外通过再次梳理希望发现更多优化的地方,也希望可以让更多的人 ...

  10. 开源netcore前后端分离,前端服务端渲染方案

    SPA单页面应用容器 开源地址: https://github.com/yuzd/Spa 功能介绍 前端应用开发完后打包后自助上传部署发布 配合服务端脚本(javascript)实现服务端业务逻辑编写 ...

最新文章

  1. 2021-7-20 Linux服务器终端terminals关不掉怎么办???
  2. angular1x初始与架构演进(三)Ui-Router+OcLazyLoad加载模块
  3. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1085:球弹跳高度的计算
  4. 将同时共享的用户数量限制为20_共享充电宝市场需求及计划
  5. 前端学习(3013):vue+element今日头条管理--手动触发验证
  6. (6)FPGA面试技能提升篇(OpenCV)
  7. pcb设计单点接地示意图_PCB设计接地详解
  8. 启动Tomcat出现Using CATALINA_BASE
  9. python实现将将输入的可约分数化简为不可约分数
  10. 云龙51单片机视频教程+课件+程序代码+课后作业,零基础入门视频教程
  11. 傅里叶变换公式及其推导【超详细!】
  12. 运用递归来画谢尔宾斯基三角形
  13. android系统程序卸载,怎样卸载Android系统程序
  14. uni-app 常用内容
  15. 汽车精准用油,您真的了解吗?
  16. Android常见的错误及解决
  17. 6 2018-SAE-based classification of school-aged children with ASD using functional magnetic resonanc
  18. 自定义切面会吃掉异常,导致事务不生效的问题。
  19. 爆料:Micron计划推出OLC(Octa Level Cell) NAND
  20. ASR 语音识别(VOSK)API资源/DEMO

热门文章

  1. Python爬虫【一】爬取移动版“微博辟谣”账号内容(API接口)
  2. 原来这就是公文写作领导讲话稿模板(3)
  3. html手机表白弹窗,怎么制作抖音弹窗表白代码 制作抖音弹窗表白代码的教程
  4. 利用计算机可视化画一个矩形,可视化程序设计大作业题目
  5. 小猫跳圈-第12届蓝桥杯Scratch省赛3真题第1题
  6. IEEE的论文哪里可以下载?
  7. Day05 郝斌C语言自学视频之C语言的函数
  8. Ds918 ds3615 ds3617区别_红、白葡萄酒间真正的区别
  9. stvd watch 实时变量查看
  10. python去重txt文本_Python实现的txt文件去重功能示例