+ -
当前位置:首页 → 问答吧 → delphi7遇到一个问题,急待解决。

delphi7遇到一个问题,急待解决。

时间:2011-12-22

来源:互联网

本人对delphi不熟悉,也是摸索着开发的,中间遇到一个问题,望各位帮我解决。
其实就是报“access violation at address in module XXX.exe”.网上也有很多这个问题,但是还是解决不了。大家帮我看看。我贴上代码.
之前引用了一个dll里的方法
function GetInfo(icdevice:integer;out cardID:integer;out cardno:pchar;block:integer):integer;stdcall;external 'GuoShui.dll';

Delphi(Pascal) code

procedure TForm1.Button3Click(Sender: TObject);
var
  sut:integer;
  cardID:integer;
  cardno:pchar;
begin
  sut:=GetInfo(icdev,cardID,cardno,ComboBox2.ItemIndex+1);
  if sut=0 then
    ListBox1.Items.Add('读数据失败')
  else
  begin
    ListBox1.Items.Add('读数据成功');
  end;
end;


麻烦大家了。

作者: aprillee87   发布时间: 2011-12-22

GetInfo是你自己写的吗,如果是就跟踪一下,问题很可能出在那几个out参数

作者: bdmh   发布时间: 2011-12-22

问题不会在这里 ,GetInfo 函数里的指针有问题,一般都是取值无效,比如某个指针是个不明确的值.

作者: zhangqiwen   发布时间: 2011-12-22

把DLL代码也贴出来看看

作者: LUJIAYU110   发布时间: 2011-12-22

将out cardno:pchar,先去掉,试试其它正常吗?

作者: LUJIAYU110   发布时间: 2011-12-22

代码贴上。麻烦大家了。
Delphi(Pascal) code

function GetInfo(icdevice:integer;out cardID:integer;out cardno:pchar;block:integer):integer;stdcall;
var
    deData:string;
    de32Data:string;
    key:string; 
    snr:Longword;
    st,loadmode:smallint;
    databuff:Array[0..31]of Char;
begin
     snr:=0;
     loadmode:=0;
     deData:=''; 
     de32Data:='';
     st:=find_card(icdevice,1,snr);
     if st<>0 then
        result:=0
     else
        begin
          cardID:=snr;
          loadmode:=0;
          key:=Copy(inttostr(snr),0,8);
          st:=read_block_hex(icdevice,loadmode,block,@databuff);
          if st<>0 then
            result:=0
          else
          begin
            deData:= databuff;
            block:=block+1;
            st:=read_block_hex(icdevice,loadmode,block,@databuff);
            if st<>0 then
              result:=0
            else
            begin
              deData:= deData+databuff;
              //解密
              de32Data:=Decode(deData,key);
              cardno:=pchar(de32Data);
              result:=1;
            end;
          end;
     end;
end;

作者: aprillee87   发布时间: 2011-12-22

已经贴出来了。发现在win7下不报错,在XP居然报错了。
引用 3 楼 lujiayu110 的回复:

把DLL代码也贴出来看看

作者: aprillee87   发布时间: 2011-12-22

代码已经贴出来了。发现在win7下不报错,在XP居然报错了。
引用 2 楼 zhangqiwen 的回复:

问题不会在这里 ,GetInfo 函数里的指针有问题,一般都是取值无效,比如某个指针是个不明确的值.

作者: aprillee87   发布时间: 2011-12-22

cardno:pchar;
 cardno 没有初始化吧

作者: ffwin   发布时间: 2011-12-22