Использование файлов с отображенной памятью Я хочу разделить структуру между процессами 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 я обнаружил, что печатаются значения мусора.
Не могли бы вы указать на ошибки, которые я допустил при реализации, или предложить лучший подход?Заранее спасибо.