Как поделиться файлом сопоставленной памяти со структурой, содержащей тип time_t, созданный с помощью программы на С ++ с программой на С #? - PullRequest
0 голосов
/ 10 июня 2019

Использование файлов с отображенной памятью Я хочу разделить структуру между процессами c ++ и c #.

структура в C ++

typedef struct Conn
{
    int num;
    time_t  ReqTime;    
}

структура в c #

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public unsafe struct Conn
{
        public int num;
        public DateTime ReqTime;
};

Trial1: Этот код печатает некоторые случайные значения Datetime.

class Program
    {
        static void Main(string[] args)
        {
            using (var memMapFile = MemoryMappedFile.OpenExisting("MapFile"))
            {
                using (var accessor = memMapFile.CreateViewAccessor())
                {
                    Conn data;
                    accessor.Read<Conn>(0, out  data);
                    Console.WriteLine(data.num);
                    DateTime ReqTime;
                        unsafe
                        {
                            ReqTime = data.ReqTime;

                        }

                    Console.WriteLine(ReqTime);
                }
            }

        }
    }

Пробная версия 2: Возникло исключение: 'System.ArgumentOutOfRangeException'

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public unsafe struct Conn
{
        public int num;
        public long ReqTime;
};
class Program
    {
        static void Main(string[] args)
        {
            using (var memMapFile = MemoryMappedFile.OpenExisting("MapFile"))
            {
                using (var accessor = memMapFile.CreateViewAccessor())
                {
                    Conn data;
                    accessor.Read<Conn>(0, out  data);
                    Console.WriteLine(data.num);
                    long ReqTime;
                        unsafe
                        {
                            ReqTime = data.ReqTime;

                        }
                    DateTime dt = new System.DateTime(ReqTime);                 
                    Console.WriteLine(dt);
                }
            }

        }
    }

Пробная версия 3: когда я пытался использоватьВ структуре байтового массива для ReqTime я обнаружил, что печатаются значения мусора.

Не могли бы вы указать на ошибки, которые я допустил при реализации, или предложить лучший подход?Заранее спасибо.

...