quicker1 quicker1
关注数: 3 粉丝数: 119 发帖数: 2,796 关注贴吧数: 13
C#和VC共享内存 [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]        public static extern IntPtr OpenFileMappingW(int dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, [MarshalAs(UnmanagedType.LPWStr)] string name);        [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]        public static extern IntPtr MapViewOfFile(IntPtr hFileMapping, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap);        const int FILE_MAP_COPY = 0x0001;        const int FILE_MAP_WRITE = 0x0002;        const int FILE_MAP_READ = 0x0004;        const int FILE_MAP_ALL_ACCESS = 0x0002 | 0x0004;        [StructLayout(LayoutKind.Sequential)]        struct sharedata        {            [MarshalAs(UnmanagedType.ByValArray,SizeConst=8192)]            public Int64[] timestamp;            [MarshalAs(UnmanagedType.ByValArray,SizeConst=8192*8)]            public  float[] sample_data;        };        public Form1()        {            InitializeComponent();            IntPtr shareaddr = IntPtr.Zero;            IntPtr mp_data   =IntPtr.Zero;            shareaddr = OpenFileMappingW(ShareMem.FILE_MAP_READ | ShareMem.FILE_MAP_WRITE, true, "ShareData");            if (shareaddr != IntPtr.Zero)            {                mp_data =MapViewOfFile(shareaddr, ShareMem.FILE_MAP_READ, 0, 0, 0);                msg.Text = "suc";                byte[] b = new byte[8192 * 72];                Marshal.Copy(mp_data, b, 0, b.Length);                IntPtr strut = Marshal.AllocHGlobal(8192*72);                Marshal.Copy(b, 0, strut, 8192 * 72);                sharedata d = (sharedata)Marshal.PtrToStructure(strut, typeof(sharedata));                Marshal.FreeHGlobal(strut);                                msg.Text+=d.sample_data[2];            }            else                msg.Text = "fai" + ShareMem.GetLastError();                       }
首页 1 2 下一页