最近在调试一个读卡器
使用的是厂家提供的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数据?谢谢
使用的是厂家提供的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数据?谢谢
begin
specName := TStringArray(pt)[i]; //到这里报内存错误
memo1.Lines.add('specName is : '+specName);
end;
从字面看应该是一个字符串列别,为什么不用TLIST 或 TStringList
var
pt:Pointer;
szText : array[1..32] of Char;以下两句取得数组值
ZeroMemory(@szText, SizeOf(szText));
StrPCopy(@szText, PChar(pt));用的着的看看吧,谢谢回帖的几位