转载请注明出处:http://blog.csdn.net/xiaoy_h/article/details/26090277

废话不多说,IPC就是进程间通信。

进程间通信能够採用的方法非常多,比方创建port后採用组播技术进行握手连接,这里要讲到的就是通过内存文件映射的方法实现。

先在项目中加入相关API函数:

  1. [DllImport("kernel32.dll", EntryPoint = "OpenFileMapping", SetLastError = true, CharSet = CharSet.Auto)]
  2. private static extern IntPtr OpenFileMapping(uint dwDesiredAccess, bool bInheritHandle, String lpName);
  3. [DllImport("Kernel32.dll")]
  4. private static extern IntPtr MapViewOfFile(IntPtr hFileMappingObject, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap);
  5. [DllImport("Kernel32.dll", EntryPoint = "UnmapViewOfFile", SetLastError = true, CharSet = CharSet.Auto)]
  6. private static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);
  7. [DllImport("kernel32.dll", EntryPoint = "CloseHandle", SetLastError = true, CharSet = CharSet.Auto)]
  8. private static extern bool CloseHandle(IntPtr hHandle);
  9. [DllImport("Kernel32.dll", EntryPoint = "CreateFileMapping", SetLastError = true, CharSet = CharSet.Auto)]
  10. private static extern IntPtr CreateFileMapping(uint hFile, IntPtr lpAttributes, uint flProtect, uint dwMaximumSizeHigh, uint dwMaximumSizeLow, string lpName);

然后在共享端加入代码:

  1. string shareName = "XiaoY_H的内存共享";
  2. char[] myShrCntnt="共享内存passwordFuck985211".ToCharArray();
  3. IntPtr hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, PAGE_READWRITE, 0, 256, shareName);
  4. IntPtr pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 256);
  5. Marshal.Copy(myShrCntnt, 0, pBuf, myShrCntnt.Length);
  6.  
  7. Console.WriteLine("共享内存建立完成,它就在这儿:IntPtr->{0:G}",pBuf.ToInt32());
  8. Console.ReadKey();
  9. UnmapViewOfFile(pBuf);
  10. CloseHandle(hMapFile);

在被共享端加入代码:

  1. string shareName = "XiaoY_H的内存共享";
  2. IntPtr hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, shareName);
  3. if (hMapFile==IntPtr.Zero)
  4. {
  5. Console.WriteLine("Null MapFile!");
  6. return;
  7. }
  8. IntPtr pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 256);
  9. if (pBuf==IntPtr.Zero)
  10. {
  11. Console.WriteLine("Null Buffer!");
  12. return;
  13. }
  14. Console.WriteLine("共享内存数据:" + Marshal.PtrToStringUni(pBuf));
  15. Console.ReadKey();
  16. UnmapViewOfFile(pBuf);
  17. CloseHandle(hMapFile);

【.NET进程通信】初探.NET中进程间通信的简单的实现的更多相关文章

  1. android92 aidl远程进程通信

    05项目RemoteService.java package com.itheima.remoteservice; //05项目 import com.itheima.remoteservice.Pu ...

  2. Android 进阶8:进程通信之 Binder 机制浅析

    读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...

  3. Linux进程通信的几种方式总结

    进程通信的目的 数据传输 一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据 多个进程想要操作共享数据,一个进程对共享数据 通知事 一个进程需要向另一个或一组进程发 ...

  4. 微端游戏启动器LAUNCHER的制作之MFC版一(序和进程通信)

    额...刚开始信誓旦旦说要写launcher制作的博客,还没写完就被抛到脑后了真是没毅力.最近把之前写的wpf的launcher改成了mfc版,遇到很多问题,写了三个星期才写完,好好记录一下吧.我也想 ...

  5. 详解 CmProcess 跨进程通信的实现

    CmProcess 是 Android 一个跨进程通信框架,整体代码比较简单,总共 20 多个类,能够很好的便于我们去了解跨进程实现的原理. 个人猜测 CmProcess 也是借鉴了 VirtualA ...

  6. [进程通信] Linux进程间通信(IPC)

    简介 linux下进程间通信的几种主要手段: 1.      管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

  7. PHP 中的多进程使用,进程通信、进程信号等详解

    多进程环境要求 Linux 系统 php-cli 模式 pcntl 扩展 或 swoole 扩展 pcntl 扩展 <?php $str = "hello world!" . ...

  8. C#中使用SendMessage进行进程通信的实例

    原文:C#中使用SendMessage进行进程通信的实例 1 新建解决方案SendMessageSecondExample 在解决方案下面新建两个项目:Sender和Receiver,两者的输出类型均 ...

  9. C#中使用命名管道进行进程通信的实例

    原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用 ...

随机推荐

  1. TMS320F28335项目开发记录5_28335之CCS编程基础

    CCS开发环境已经为我们封装好了很多片内外设寄存器的结构体,我们仅仅须要包括对应的官方的头文件就能够使用了,那么它的内部详细是怎样实现的呢? 以下来一个典型的样例: 1.使用结构体和联合体 A.用st ...

  2. 找呀志_通过开源框架引AsyncHttpClient上传文件

    一个.步骤: 1.加入权限(接入网络和可写) 2.获取上传文件的路径和推断是空的 3.如果为空.创建一个异步请求对象 4.创建上传文件路径 5.跑post请求(指定url路径.封装上传參数.新建Asy ...

  3. 单片机实验: 三轴磁场模块 GY-271

    最近买了一块三轴磁场模块进行实验 名称:HMC5883L模块(三轴磁场模块) 型号:GY-271 使用芯片:HMC5883L 供电电源:3-5v 通信方式:IIC通信协议 测量范围:±1.3-8 高斯 ...

  4. Failed to load libGL.so问题解决

    Ubuntu 14.04下启动模拟设备Android 4.2.2的时候报错: failed to load libgl.so 先用locate 命令定位libGL库, 然后加入�一个链接就可以: de ...

  5. LAMP配置参考地址

    http://www.linuxidc.com/Linux/2014-07/104563.htm

  6. VS调试技巧之附加进程

    用过VS一段时间的程序猿们相信都有过这种调试经历:每次按下F5进行断点调试时,都要等待好长时间:先让解决方式编译通过,然后启动VS自带的简版IIS作为server启动,进而开启浏览器,最后进行对应的操 ...

  7. visual studio 2013常用快捷键 VS2013快捷键大全

    visual studio 2013常用快捷键 VS2013快捷键大全   Visual Studio 2013 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具 ...

  8. lucas定理解决大组合数取模

    LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...

  9. Jetty安装学习并展示

    Jetty 的基本架构 Jetty 眼下的是一个比較被看好的 Servlet 引擎,它的架构比較简单,也是一个可扩展性和很灵活的应用server,它有一个基本数据模型,这个数据模型就是 Handler ...

  10. java线程池的注意事项

    java线程池是建立一个技术进步的线程.到来之前线程池打造一批在线程的线程尚未,队列上的备用,然后再利用这些资源.减少频繁创建和销毁对象, 1.jdk1.5以上提供了现成的线程池 2.java线程池的 ...