从托管代码到非托管代码在共享内存中共享整数数组

Share integer array across shared memory from Managed to Unmanaged code

我想分享一个固定大小的 integer array,从 C# 中的 Windows Serviceunmanaged C++ 中编写的代码。这将跨越 2 个进程,C# 中的 Windows Service,到 C++ 中的另一个进程。

这个事务需要做一次,而且不是一个大数组,只是需要传递,跨越两者之间的共享内存。

实现此目标的最有效方法是什么?也许使用 memory mapped files,但我不确定数据将如何传递。

编辑 -

我不想使用 CLI 包装器,或者P/INVOKE(因为我知道这很费时间)。

我将继续进行内存映射,但我不确定两者之间的数据如何 marshalledunmarshalled

有不同的方法可以实现这一点 -

  1. 编写一个小的 CLI 包装层。
  2. 使用共享资源。例如以文件形式写入 c#,然后以 c++
  3. 读取

在 C# 端,您可以使用 MemoryMappedFile class 访问内存映射文件。

在非托管方面,您可以使用 Windows API 函数 CreateFileMapping() to open the mapped file, and then use MapViewOfFile 获取文件中数据的 void*。然后,您可以将 void* 转换为 int* 以将数据作为整数数组访问。

您可能还想使用命名的同步事件(在 Windows API 中使用 EventWaitHandle in C# and CreateEvent())在 MMF 已填充时发出信号。