C#与C++两个进程间通过共享内存交互

C#写些应用程序,有时会用到与底层语言C++间的交互。有时候为了提升程序部分性能可以选择共享内存的方式来处理。

1.C#处理相关的代码

        static void Main(string[] args)
        {
            //定义内存大小
            int size = 1024;

            //创建共享内存
            MemoryMappedFile shareMemory = MemoryMappedFile.CreateOrOpen("global_share_memory", size);

            Console.WriteLine("创建共享内存完成...");

            //线程等待10秒
            System.Threading.Thread.Sleep(10000);

            var stream = shareMemory.CreateViewStream(0, size);

            string value = "Hello World";

            byte[] data = System.Text.Encoding.UTF8.GetBytes(value);

            stream.Write(data);

            stream.Dispose();

            Console.ReadKey();
        }

2.C++处理相关的代码

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    LPVOID pBuffer;
    string strMapName("global_share_memory");
    HANDLE hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, strMapName.c_str());
    if (NULL == hMap)
    {
        cout << "无共享内存..." << endl;
    }
    else
    {
        while (true)
        {
            Sleep(1000);
            pBuffer = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
            cout << "读取共享内存数据:" << (char*)pBuffer << endl;
        }
    }
}

3.运行C#程序,然后运行C++程序就可以实现数据交互。效果如下


desk1.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,548评论 1 11
  • 想起legal high中的一集,说写博客记录人生的博主有大量的不实内容,而且错乱时间。因为有的时候,一天也不会有...
    锦鲤熊阅读 327评论 1 1
  • 「创业就像一场游戏,挨个碉堡必须炸掉,你过不了这个关,你的理想就会灰飞烟灭,如果意识到这一点,其实很多你不擅长的事...
    田园牧歌928阅读 156评论 0 0
  • okHttp用于android的http请求。据说很厉害,我们来一起尝尝鲜。但是使用okHttp也会有一些小坑,后...
    uncle_charlie阅读 10,367评论 6 3