美文网首页
C#与C++两个进程间通过共享内存交互

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

作者: adgerchen | 来源:发表于2019-08-11 22:20 被阅读0次

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

相关文章

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

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

  • 进程与线程、线程池

    进程和线程 进程间无法共享内存,可以通过tcp/ip端口交互等线程之间共享内存进程开销大,分配内存线程分配栈和PC...

  • 17.共享内存的操作

    system v IPC,通过ftok创建共享内存键值 输出: 获取共享内存段的键值: 输出: 利用两个程序,交互...

  • 应用安全问题沉淀

    首先对遇到的安全问题进行归类: 服务交互安全测试 进程间交互安全由于Android App之间不能共享内存,为了实...

  • 共享内存

    Linux进程间通信 - 共享内存

  • liunx中共享内存

    实现步骤 创建共享内存区 进程1申请一块共享区域,通过shmget函数生成 映射共享内存到进程1 通过shmat实...

  • 进程间通信-利用共享内存和管道通信实现聊天窗口

    问题模型 A、B两个进程通过管道通信,A 进程每次接收到的数据通过共享内存传递给A1进程显示,同理,B进程每次接收...

  • Android

    ContentProvider 作用 进程间数据共享 即跨进程通信 原理 Binder进程间通信结合匿名共享内存(...

  • 进程间通讯

    一、进程间通讯的方式进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和...

  • 15 Go并发编程(二):管道 —— Go并发的通信机制

    Go管道 1.什么是管道? 管道最早由CSP模型提出,以点对点管道代替内存共享实现并发进程间的数据交互,相比内存共...

网友评论

      本文标题:C#与C++两个进程间通过共享内存交互

      本文链接:https://www.haomeiwen.com/subject/cwlejctx.html