只在C++看过FILEMAP,不过,如果是字符串的问题,你不妨把C#的字符串打散,以字符数组的形式存储

解决方案 »

  1.   

    共享内存是比较难控制的,我以前用,现在全部改为socket通讯了。呵呵
      

  2.   

    这是一个联网的项目,socket 也得做的,共享内存是为本机客户端调用,socket做网络传输,我们项目经理不可理喻,如果用vc我10分钟就搞定了,换C#做这个东东,实在是不怎么样
      

  3.   

    看看这个对你有没有帮助
    http://www.cnblogs.com/jiangyh-is-me/archive/2006/06/05/417381.aspx
      

  4.   

    想了解这个问题的可以在QQ上问我.30267814 或E-mail:[email protected]
      

  5.   

    Net_Cover(倒栽葱) ( ) 信誉:100    Blog  2007-03-28 09:04:16  得分: 0  
     
     
       我靠,你顶个啥,我是求解哦,你顶一下就能把问题解决?
      
     
    --------------------------------------------------------
    典型的傻X,不顶帖子就沉了。
      

  6.   

    最后字符串问题的解决办法,引入API   memcpy
    代码如下: [DllImport("ntdll.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr memcpy(
    IntPtr dst,
    string src,
    int count);
    ......写:IntPtr memFileHandle = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, PAGE_READWRITE, 0, (uint)1024, "mWeightData1");
    if (memFileHandle == IntPtr.Zero)
    {
    MessageBox.Show("建立共享失败");
    }
    else
    {
    ///IntPtr h_pmw = MapViewOfFile(memFileHandle, FILE_MAP_WRITE, 0, 0, (uint)100);
    IntPtr h_pmw = MapViewOfFile(memFileHandle, FILE_MAP_WRITE, 0, 0, 0);
    int s = Marshal.SizeOf(mwd);
    if (h_pmw == IntPtr.Zero)
    {
    MessageBox.Show("建立映射失败");
    }
    else
    {

    memcpy(h_pmw,textBox1.Text, textBox1.Text.Length*2);

    }
    }.......
    读:
    IntPtr mMapHandle = OpenFileMapping( FILE_MAP_READ,false,"mWeightData1");
    if(mMapHandle == IntPtr.Zero)
    {
    MessageBox.Show("打开共享失败,请确认服务已启动");
    } else
    {
    WeightData mrw = new WeightData();
    IntPtr h_rw = MapViewOfFile(mMapHandle,FILE_MAP_READ,0,0,0);//(uint)100

    textBox2.Text =(string) Marshal.PtrToStringAuto(h_rw);//PtrToStringAnsi(h_rw,256);
    }