开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3508|回复: 2
收起左侧

[源码分享] 使用命名管道实现进程间通信

[复制链接]
发表于 2018-4-29 12:47:43 | 显示全部楼层 |阅读模式   陕西省西安市
typedef struct _tMsg
{
        INT xttag;
        INT type;
        INT len;
        CHAR data[1];
} IPCMSG;

class CIPCModule
{
public:
        static CIPCModule* GetInstance()
        {
                static CIPCModule obj;

                return &obj;
        }
        ~CIPCModule() {}

        BOOL Init()
        {
                m_hPipeServer = CreateNamedPipe(
                        PIPE_NAME,
                        PIPE_ACCESS_INBOUND,
                        PIPE_TYPE_MESSAGE | PIPE_WAIT,
                        PIPE_UNLIMITED_INSTANCES,
                        PIPE_BUFFER_SIZE,
                        PIPE_BUFFER_SIZE,
                        1000,                               
                        NULL
                        );
                if (m_hPipeServer == INVALID_HANDLE_VALUE) {
                        return FALSE;
                }

                return TRUE;
        }

        BOOL SendMsg(MSGTYPE type, LPCTSTR data, INT length)
        {
                HANDLE hPipeClient = CreateFile(PIPE_NAME, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
                if (hPipeClient == INVALID_HANDLE_VALUE) {
                        return FALSE;
                }
                CHandleRelease h_obj1(hPipeClient);

                LPSTR msgbuf = new CHAR[sizeof(IPCMSG)+length];
                if (msgbuf == NULL) {
                        return FALSE;
                }
                CObjRelease<CHAR> c_obj1(msgbuf);

                IPCMSG *pMsg = (IPCMSG *)msgbuf;
                pMsg->xttag = XTTAG;
                pMsg->type = type;
                pMsg->len = length;

                CopyMemory(pMsg->data, CT2A(data), length + 1);
                DWORD dwWrite;
                return WriteFile(hPipeClient, msgbuf, sizeof(IPCMSG)+length, &dwWrite, NULL);
        }

        BOOL GetMsg(IPCMSG **msg)
        {
                BOOL bRet = FALSE;
                LPSTR pBuf = new CHAR[PIPE_BUFFER_SIZE];
                ZeroMemory(pBuf, PIPE_BUFFER_SIZE);
                if (ConnectNamedPipe(m_hPipeServer, NULL)) {
                        DWORD dwRead;
                        bRet = ReadFile(m_hPipeServer, pBuf, PIPE_BUFFER_SIZE, &dwRead, NULL);
                        *msg = (IPCMSG *)pBuf;
                }

                DisconnectNamedPipe(m_hPipeServer);

                return bRet;
        }

private:
        CIPCModule() {}

private:
        HANDLE m_hPipeClient;
        HANDLE m_hPipeServer;
};

结帖率:67% (2/3)
发表于 2022-7-26 00:23:40 | 显示全部楼层   四川省成都市
#在这里快速回复#,是学习和实现DOS交互操作
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 1 天

发表于 2018-10-10 18:47:59 | 显示全部楼层   江苏省宿迁市
感谢分享 进程间通讯还有很多种方法,SENDMESSAGE  SOCKET 内存映射都可以哈 。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表