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 
#include 

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++两个进程间通过共享内存交互)