CnPack Forum » CnVCL 组件包 » 关于组件包中HashMap存放动态数组的问题!


2008-12-14 12:50 85860492
关于组件包中HashMap存放动态数组的问题!

我有这样一个实现:


在对象的初始化时初始化一个存放动态数组的HashMap,但是在获取内容时总是为空。我的代码


type
[b]  TPacketFieldArray = Array of String ;
  PPacketFieldArray = ^TPacketFieldArray;
[/b]

  TMyObject = Class(TObject)
    public
      constructor Create();
      destructor Destroy; override;
    private
      FPacketMapping: [b]TCnStrToPtrHashMap[/b];
      procedure init;

。。。。。。。。。

constructor TMyObject .Create;
begin
  [b]Init;
[/b]end;
destructor TMyObject .Destroy;
begin
  FreeAndNil(FPacketMapping);
  inherited;
end;

procedure TTransformer.init;
var
  PacketField:TPacketFieldArray;
begin
  try
    FPacketMapping := TCnStrToPtrHashMap.Create(5);

[b]    SetLength(PacketField,2);
    PacketField[0] := 'CommandId';
    PacketField[1] := 'Code';
    FPacketMapping.Add('S0000',@PacketField);[/b]
[b]
    SetLength(PacketField,2);
    PacketField[0] := 'CommandId';
    PacketField[1] := 'Data';
    FPacketMapping.Add('R0000',@PacketField);[/b]
[b]    .............//放入多个动态数组[/b]
  except
    FreeAndNil(FPacketMapping);
    raise;
  end;
end;

////////////////在方法中使用上面初始化的Map

var
  PArray Pointer;
  TempS:String;
begin
  FPacketMapping.Find('S'+CommandId,PArray);
  if Assigned(PArray)then
      begin
        PF := PPacketFieldArray(PArray);
        for i:=Low(PF^) to High(PF^)do
        begin
          TempS := TempS+'|'+PF^[i];
        end;
   end;
end;



[b]问题:为什么获取的动态数字不可以操作!并未 初始化,能给出个建议的做法吗?谢谢!!!!![/b][/i]

[[i] 本帖最后由 85860492 于 2008-12-14 12:51 编辑 [/i]]

2008-12-14 16:11 Passion
FPacketMapping.Add('S0000',@PacketField);改为FPacketMapping.Add('S0000',Pointer(PacketField));试试看?

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.