最近在调试一个读卡器
使用的是厂家提供的ocx,其中遇到一个问题
函数定义为:
function Cardsnr(FkConNum: Byte): PSafeArray;我定义了一个psafearray类型arr
代码如下:
procedure TForm1.BtreadMoneyClick(Sender: TObject);
var
  portnum:Byte;
  arr:PSafeArray;
  pt:Pointer;
  tstr,specName:string;  hr: HRESULT;
  i: integer;
begin
  portnum:=6;
  arr:=CardRW1.Cardsnr(portnum);
  hr := SafeArrayAccessData(arr,pt);
  if FAILED(hr) then
    memo1.Lines.Add('error!')
  else
  begin    for i:=1 to 4 do
    begin
      specName := TStringArray(pt)[i];     //到这里报内存错误
      memo1.Lines.add('specName is : '+specName);
    end;
  end;
  SafeArrayUnAccessData(arr);end;请问如何解析出获得的psafearray数据?谢谢

解决方案 »

  1.   

        for i:=0 to 3 do //可能是下标问题
        begin 
          specName := TStringArray(pt)[i];    //到这里报内存错误 
          memo1.Lines.add('specName is : '+specName); 
        end; 
      

  2.   

     TStringArray 是什么?你要人帮你,就自己写详细点
    从字面看应该是一个字符串列别,为什么不用TLIST 或 TStringList
      

  3.   

    已解决,我写下解决方法
    var
      pt:Pointer;
      szText : array[1..32] of Char;以下两句取得数组值
        ZeroMemory(@szText, SizeOf(szText));
        StrPCopy(@szText, PChar(pt));用的着的看看吧,谢谢回帖的几位