代码之家  ›  专栏  ›  技术社区  ›  user1173240

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

  •  -1
  • user1173240  · 技术社区  · 9 年前

    我想分享一个 integer array ,固定大小,在 Windows Service 在里面 C# ,写入的代码 unmanaged C++ 。这将跨越两个过程 Windows服务 在里面 C类# ,到中的另一个进程 C++ .

    这个事务需要完成一次,它不是一个大数组,只是需要在两者之间的共享内存中传递。

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

    编辑-

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

    我将继续进行内存映射,但我不确定数据将如何 marshalled unmarshalled 在两者之间。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Matthew Watson    9 年前

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

    在非托管端,您可以使用Windows API函数 CreateFileMapping() 打开映射文件,然后使用 MapViewOfFile 获得 void* 到文件中的数据。然后你可以投那个 无效* int* 以int数组的形式访问数据。

    您可能还希望使用命名的同步事件(使用 EventWaitHandle 在C#和 CreateEvent() 在Windows API中),以在MMF已被填充时发出信号。

        2
  •  1
  •   Nishant Kumar    9 年前

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

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