现有一个关问函数调用的问题.描述如下.函数是DLL中的库函数,声明如下.
  function  WriteGuestKey( sRom :PChar; OldKeyEnd, BAKKey, TSRight :Integer; FloorCode, FloorLayCode, RoomCode, iSubRoomCode :Cardinal; EndDateTime :PChar ) :Integer;
            stdcall; export;在我的调用如下.
var
    Building,Floor:Cardinal;
    sRom,sErrInfo: PChar;
    RoomCode,IsSubRomCod :Cardinal;
    iEndDateTime :PChar;
begin
  Building := strtoint(Buildid);    //Buildid为单元内局部变量
  Floor:=StrtoInt(floorid); //floorid为单元内局部变量
  RoomCode:=strtoint(rightstr(Roomid,3));   //
  IsSubRomCod:=0;                           //内间号
  iEndDateTime:=PChar(Enddatetime+':00');   //时间加上秒
  GetMem(sRom,12);
  try  //写卡
  //Ret:=WriteGuestKey( sRom, 1, 0, 0, 0,0,0, 0, iEndDateTime );
  Ret:=WriteGuestKey( sRom, 1, 0, 0, Building, Floor, RoomCode, IsSubRomCod, iEndDateTime );
  RomValue:= sRom;
  finally
  freemem(sRom);
  end;
    showmessage(inttostr(ret));
end;
问题:
  //Ret:=WriteGuestKey( sRom, 1, 0, 0, 0,0,0, 0, iEndDateTime );
  Ret:=WriteGuestKey( sRom, 1, 0, 0, Building, Floor, RoomCode, 0, iEndDateTime );
为什么上面两种调用方法执行的返回值是不同的.
我要把我的变量值传递给函数(主要是中间Building,RoomCOde,IsSubRomCod这三个变体参数该如何赋值),要如何调用.急.请各位大哥帮忙.

解决方案 »

  1.   

    说明,sRom是输出参数,其他是输入参数
      

  2.   

     //Ret:=WriteGuestKey( sRom, 1, 0, 0, 0,0,0, 0, iEndDateTime ); 
    上面这个参数都固定了
      Ret:=WriteGuestKey( sRom, 1, 0, 0, Building, Floor, RoomCode, 0, iEndDateTime );
    这个参数随着全局变量的更改而更改
    你能保证 Building, Floor, RoomCode这三个参数一直等于0吗?主要是中间Building,RoomCOde,IsSubRomCod这三个变体参数该如何赋值
    这三个参数的类型都是Cardinal,其实就是Integer,只不过是没有负数的整形
      

  3.   

    TO:mantti
    Building,RoomCOde,IsSubRomCod,这三个参数在赋值时是没有问题的,我跟踪过的。
    上面那个函数是制卡的,我制卡需要给这三个参数赋值,所以不能用固定的,只能用变量来做。
    而且在执行时,参数的值也没有错,只是调用函数后,和上面固定值参数调用的结果不同。
    不知道错在哪里,如何做是好。
      

  4.   

      Ret:=WriteGuestKey( sRom, 1, 0, 0, Building, Floor, RoomCode, IsSubRomCod, iEndDateTime ); 
      RomValue:= sRom; 
    是不是调用这个函数时,它执行需要时间,
    等一两秒试试看.