某种需求。一个应用程序往里写,另一个程序读。
帮忙了

解决方案 »

  1.   

    或者:http://www.yesky.com/42/1720542.shtml
      

  2.   

    创建内存映射这个方法我知道。可是写了一下午也没有搞定。请高手写个demo出来
      

  3.   

    看我写的代码,会报错procedure TForm1.Button1Click(Sender: TObject);
    var
     pRepData:pTRepData;
    begin
      //创建映射文件
      hMapping := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TRepData),'RepData');
      if hMapping = 0 then begin
        ShowMessage('不能创建内存映射文件');
        Exit;
      end;
      //将映射文件映射到本进程
      RepMemQueue := TQueue(MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0));
      if RepMemQueue = nil then begin
        CloseHandle(hMapping);
        ShowMessage('不能创建映射视图');
        Exit;
      end;
      New(pRepData);
      pRepData^.name := 'test1';
      pRepData.value := 0.05;
      RepMemQueue.Push(pRepData);   //报错
    end;我的目的是创建一个全局TQueue对象,两个应用程序能够操作这个对象。
    请指教。
    谢谢
      

  4.   

    应该不能这样直接映射:
    RepMemQueue := TQueue(MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0));TQueue是一个容器,自己会分配内存,这样映射了,只能对类操作。我想,你只能自己建立一个类,来实现队列。而这个类操作的对象就是这片映射的内存。
      

  5.   

    给你个参考。http://www.codeguru.com/cpp/w-p/system/sharedmemory/article.php/c2879/
      

  6.   

    此问题,我已经解决了。一个应用程序用WM_COPYDATA消息传递结构指针,另外一个应用程序读取后放入队列。快速有效。