现有一个关问函数调用的问题.描述如下.函数是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这三个变体参数该如何赋值),要如何调用.急.请各位大哥帮忙.
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这三个变体参数该如何赋值),要如何调用.急.请各位大哥帮忙.
解决方案 »
- 如何编一个简单的媒体播放器??
- 在windows界面下访问dos,并返回结果?(在线等)
- 谁有关于DICOM的资料及控件,可以发一份给我吗?
- 使用adoquery和datasource, 如何向数据集中插入新的记录?请高手指点啊!
- 用delphi7开发数据库管理系统,求比较好的书籍,谢谢!
- 怎样在指定窗体中划可移动的直线?
- 怎样在控制台程序显出结果后,能停一下,当按下任意键后才结束?谢谢!
- 怎样让TWebBrowser向需要接收表单元素的页面发表单数据?(怎样Post)?
- 有什么办法可以使TGraphicControl绘一次后就记住, 一直保留并显示上次绘制内容?
- 菜鸟的问题:Datamodule怎样和form相连
- 浮点数操作上的问题
- 用adodataset、adoconnection控件实现点击DBRrid的title进行排序的问题
上面这个参数都固定了
Ret:=WriteGuestKey( sRom, 1, 0, 0, Building, Floor, RoomCode, 0, iEndDateTime );
这个参数随着全局变量的更改而更改
你能保证 Building, Floor, RoomCode这三个参数一直等于0吗?主要是中间Building,RoomCOde,IsSubRomCod这三个变体参数该如何赋值
这三个参数的类型都是Cardinal,其实就是Integer,只不过是没有负数的整形
Building,RoomCOde,IsSubRomCod,这三个参数在赋值时是没有问题的,我跟踪过的。
上面那个函数是制卡的,我制卡需要给这三个参数赋值,所以不能用固定的,只能用变量来做。
而且在执行时,参数的值也没有错,只是调用函数后,和上面固定值参数调用的结果不同。
不知道错在哪里,如何做是好。
RomValue:= sRom;
是不是调用这个函数时,它执行需要时间,
等一两秒试试看.