Обмен файлами памяти C++ на C#
я пытаюсь поделиться массивом через файл памяти, мой проект c++ создаст массив, а затем мой проект c# примет this.im использование кода, основанного на
Здесь я могу получить номер, но не массив
Что я уже пробовал:
C++ <pre lang="c++"><pre>#include <stdio.h> #include <tchar.h> #include <iostream> using namespace std; #define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT _WIN32_WINNT_WINXP // System Include #include <windows.h> #include <winsock2.h> struct INFO { char Name[MAX_PATH]; int Number; int myAray[70]; }; HANDLE FileMappingHandle; INFO* FileMapping; void EntryProc() { if ((FileMappingHandle = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, sizeof(INFO), "Local\\INFO_MAPPING")) == 0) { return; } if ((FileMapping = (INFO*)MapViewOfFile(FileMappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(INFO))) == 0) { return; } for (int i = 0; i < 70; i++) { FileMapping->myAray[i] = i; cout << '\n' << "Number->" << FileMapping->myAray[i] << endl; } FileMapping->Number = 1337; printf("FileMapping->Number: %d", FileMapping->Number); } int main() { EntryProc(); do { cout << '\n' << "Press the Enter key to continue."; } while (cin.get() != '\n'); return 0; }
и сторона с#
<pre> using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; using System.IO.MemoryMappedFiles; using System.Security.Principal; using System.IO; namespace ReadyFilememoryCSharp { class Program { [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi,Size =12)] public unsafe struct INFO { [FieldOffset(0)] public fixed byte Name[260]; [FieldOffset(260)] public int Number; [FieldOffset(0)] public int[] myArray; } private static MemoryStream Convert(int[] Num, byte[] Bytes) { Buffer.BlockCopy(Num, 0, Bytes, 0, Bytes.Length); MemoryStream stream = new MemoryStream(Bytes); return stream; } static void Main(string[] args) { using (var memMapFile = MemoryMappedFile.CreateOrOpen( "Local\\INFO_MAPPING", 1024, MemoryMappedFileAccess.ReadWriteExecute, MemoryMappedFileOptions.None, System.IO.HandleInheritability.Inheritable)) { using (var accessor = memMapFile.CreateViewAccessor()) { accessor.Read<INFO>(0, out INFO data); string name; unsafe { name = new String((sbyte*)data.Name, 0, 260); } Console.WriteLine(data.Number); Console.WriteLine(data.myArray); } } Console.ReadKey(); } } }