我在调用接口函数时提示:Access violation at address 778206B in module 'ntdll.dll'.Read of address 00000034别人接口函数定义是:int  GetPersonInfo(int Flag, int MedKind, char*  SysDate,  int*  AppCode,  char*  DataBuffer )接口dll是:DBLib.dll我的在程序中的定义是:
type TSiStr=array[0..500]of char;  function GetPersonInfo
          (
          Flag:integer;
          MedKind:integer;
          SysDate:TSiStr;
          AppCode:integer;
          var DataBuffer:TSiStr
          ):integer;stdcall;external 'DBLib.dll';   之后我调用方法是:
var
     Flag:integer;       
     MedKind:integer;   
     SysDate:TSiStr;    
     AppCode:integer;    
     DataBuffer:TSiStr; 
     BackNo    :integer;
begin
     Flag:=1;
     MedKind:=1;
     ParaStr:=FormatDateTime('YYYYMMDD',Now());
     strpcopy(SysDate,ParaStr);     //运行结果信息
     for i:=0 to 500 do DataBuffer:=' ';     BackNo:=GetPersonInfo(Flag,MedKind,SysDate,AppCode,DataBuffer);     if(BackNo<>0)then begin
        MessageBox
          (
          Self.Handle,
          DataBuffer,
          '提示',
          mb_Ok+mb_IconWarning
          );
        Exit;
     end;
end;
就在调用BackNo:=GetPersonInfo(Flag,MedKind,SysDate,AppCode,DataBuffer);函数之后提示Access violation at address 778206B in module 'ntdll.dll'.Read of address 00000034注:GetPersonInfo函数是别人接口'DBLib.dll'中的函数,我看不到别人接口中的代码!有劳各位大侠指点一下,非常感谢

解决方案 »

  1.   

    function GetPersonInfo
      (
      Flag:integer;
      MedKind:integer;
      SysDate:pchar;
      AppCode:pinteger;
      var DataBuffer:pchar
      ):integer;stdcall;external 'DBLib.dll';   
      

  2.   

    var
      Flag:integer;   
      MedKind:integer;   
      ParaStr:String;   
      AppCode:integer;   
      DataBuffer:pchar;  
      BackNo :integer;
    begin
      Flag:=1;
      MedKind:=1;
      ParaStr:=FormatDateTime('YYYYMMDD',Now());
      getmem(DataBuffer,500)//这个大小你自己定
      BackNo:=GetPersonInfo(Flag,MedKind,pchar(ParaStr),@AppCode,DataBuffer);
      //最后记得freemem(DataBuffer)
      

  3.   

    对了,我上面定义的时候是把DataBuffer定义成数组类型的array[0..500]of char,按理说跟你直接分配空间应该是一样的才对啊!原来我那样定义都是可以的,真怪,上午有好多事情所以只能下午再试试你说的这种方法了,谢谢啊
      

  4.   

    人家都没给你stdcall的调用约定
    function GetPersonInfo
      (
      Flag:integer;
      MedKind:integer;
      SysDate:TSiStr;
      AppCode:integer;
      var DataBuffer:TSiStr
      ):integer;cdecl;external 'DBLib.dll';  
    试试, C/C++默认调用方式