unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form3: TForm3;implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
type
  TShared = record
    keys:array of String[255];
  end;
  PShared = ^TShared;
const
  PMEMF='afkgjsl';
var
  Shared:PShared;
  MapHandle: THandle;
  i:Integer;
begin
    SetLength(Shared^.keys,4);   //到这里出错,
    MapHandle:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, PMEMF);
    if MapHandle=0 then
    begin
      MapHandle := CreateFileMapping($FFFFFFFF, nil,PAGE_READWRITE,0,SizeOf(TShared),PMEMF);
    end;
    if MapHandle<>0 then
      begin
      Shared:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,0);
      end;
    Shared^.keys[0]:='abcd';
    Shared^.keys[1]:='efgh';
    Shared^.keys[2]:='hijkl';
    Shared^.keys[3]:='mnopq';
end;end.Shared^.keys 是需要动态确定的,请问如何设置!

解决方案 »

  1.   

    Shared:PShared;是一个指针,你创建了吗?因为你没创建,所以出错
      

  2.   

    new(Shared);//使用前先分配下内存SetLength(Shared^.keys,4); //到这里出错,
    MapHandle:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, PMEMF);
      

  3.   

     你好,我需要将Shared^.keys共享,在其它进程要读取其值,
    请帮我改写下代码,
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm3 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;type
      TShared = record
        keys:array of String[255];
      end;
      PShared = ^TShared;
    var
      Form3: TForm3;implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
    const
      PMEMF='afkgjsl';
    var
      Shared:PShared;
      MapHandle: THandle;
    begin
        new(Shared);
        SetLength(Shared^.keys,4);
        MapHandle:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, PMEMF);
        if MapHandle=0 then
        begin
          MapHandle := CreateFileMapping($FFFFFFFF, nil,PAGE_READWRITE,0,SizeOf(TShared),PMEMF);
        end;
        if MapHandle<>0 then
          begin
          Shared:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,0);
          end;
        Shared^.keys[0]:='abcd';
        Shared^.keys[1]:='efgh';
        Shared^.keys[2]:='hijkl';
        Shared^.keys[3]:='mnopq';
    end;end.读取代码
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm4 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
      TShared = record
        keys:array of String[255];
      end;
      PShared = ^TShared;
    var
      Form4: TForm4;implementation{$R *.dfm}procedure TForm4.Button1Click(Sender: TObject);
    const
      PMEMF='afkgjsl';
    var
      MapHandle: THandle;
      Shared:PShared;
    begin
        New(Shared);
        SetLength(Shared^.keys,4);
        MapHandle:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, PMEMF);
        Shared:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,0);
        ShowMessage(String(Shared^.keys[0]));
        ShowMessage(String(Shared^.keys[1]));
        ShowMessage(String(Shared^.keys[2]));
        ShowMessage(String(Shared^.keys[3]));
    end;end.