function XinKaiPuDll_GetPIDInfo(A_pInfo: PXinKaiPuDllPIDInfoArr;
var A_sRstMsg: String): Boolean;
var
iRst1,i,iCount: Integer;
pInfo: PXinKaiPuDllPIDInfo;
begin
Result := False;
iRst1 := -1;
New(pInfo);
FillChar(pInfo^,SizeOf(pInfo^),#0);
iRst1 := XinKaiPuDll_CapGetAllSFdetail(pInfo);
if iRst1 > 0 then
begin
iCount := iRst1;
SetLength(A_pInfo^,iCount);
for i := 0 to iRst1 - 1 do
begin
A_pInfo^[i].PID := pInfo^.PID;
StrCopy(A_pInfo^[i].PName,PChar(Trim(pInfo^.PName)));
Inc(pInfo);
end;
Result := True;
end
else
begin
A_sRstMsg := XinKaiPuDll_ErrorMsg(iRst1);
end;
Dispose(pInfo); //执行到这里,释放指针时报‘invalid pointer operation’end;
var A_sRstMsg: String): Boolean;
var
iRst1,i,iCount: Integer;
pInfo: PXinKaiPuDllPIDInfo;
begin
Result := False;
iRst1 := -1;
New(pInfo);
FillChar(pInfo^,SizeOf(pInfo^),#0);
iRst1 := XinKaiPuDll_CapGetAllSFdetail(pInfo);
if iRst1 > 0 then
begin
iCount := iRst1;
SetLength(A_pInfo^,iCount);
for i := 0 to iRst1 - 1 do
begin
A_pInfo^[i].PID := pInfo^.PID;
StrCopy(A_pInfo^[i].PName,PChar(Trim(pInfo^.PName)));
Inc(pInfo);
end;
Result := True;
end
else
begin
A_sRstMsg := XinKaiPuDll_ErrorMsg(iRst1);
end;
Dispose(pInfo); //执行到这里,释放指针时报‘invalid pointer operation’end;
iRst1 := XinKaiPuDll_CapGetAllSFdetail(pInfo);
....
检查iRst1的值,若<1 ,到函数XinKaiPuDll_CapGetAllSFdetail中去跟。
...
New(pInfo);
pSrcInfo:= pInfo;
...
Dispose(pSrcInfo);
New(pInfo);
pSrcInfo:= pInfo;
下面全用pSrcInfo代替pInfo进行操作
...
Dispose(pInfo);
var A_sRstMsg: String): Boolean;
var
iRst1,i,iCount: Integer;
pInfo,pSrcInfo: PXinKaiPuDllPIDInfo;
begin
Result := False;
iRst1 := -1;
New(pInfo);
FillChar(pInfo^,SizeOf(pInfo^),#0);
iRst1 := XinKaiPuDll_CapGetAllSFdetail(pInfo);
if iRst1 > 0 then
begin
pSrcInfo:= pInfo;
iCount := iRst1;
SetLength(A_pInfo^,iCount);
for i := 0 to iRst1 - 1 do
begin
A_pInfo^[i].PID := pSrcInfo^.PID;
StrCopy(A_pInfo^[i].PName,PChar(Trim(pSrcInfo^.PName)));
Inc(pSrcInfo);
end;
Result := True;
end
else
begin
A_sRstMsg := XinKaiPuDll_ErrorMsg(iRst1);
end;
Dispose(pInfo);
end;这样写也不行。而且pSrcInfo不用释放吗?
Inc(pSrcInfo);
都感觉很不靠谱。
指针操作?数组操作?
需要谨慎!
lz 试试先内部组织一个非指针的数据,然后再赋值出去。
分成两步以后,错误就好调试了。
那我这样说吧。我把调用的函数说明贴出来。谁帮我分析下,写个代码,我看看行不。
typedef struct UserSF
{
long id; //编号
char dsc[32]; //文字描述
}SFINFO;6.19. 获取客户身份信息
long CapGetAllSFdetail(SFINFO *pINFO)
6.19.1. 功能描述
获取全部身份信息(身份编号、描述)
6.19.2. 参数说明
入口参数
SFINFO *pINFO 指向客户身份信息结构的指针,参见结构的详细描述。如果为空指针则直接返回系统当前身份信息的总数量。
出口参数
>0 成功获取信息的数量,信息存放在pINFO中
-1 调用WebService异常
-2 调用WebService失败