调用PB写的DLL函数(ref string)

fullhappy 2010-02-26 11:19:56
大家好,我这2天碰到了这个问题,DLL是用PB写的,我调用里面的函数。分别定义如下:
========================函数在PB中引用========================
--函数定义
FUNCTION UnsignedInteger ICC_Open_Port(int Port) LIBRARY "ICC_32.DLL"
FUNCTION UnsignedInteger ICC_Close_Port( ) LIBRARY "ICC_32.DLL"
FUNCTION UnsignedInteger ICC_Verify(UnsignedInteger Lc,ref string Pin) LIBRARY "ICC_32.DLL"
--读卡函数 返回值第一个串为卡号
FUNCTION UnsignedInteger GetPersonalInfo(ref string Info) LIBRARY "ICC_32.DLL"

========================函数在Dephi中引用========================
function ICC_Open_Port(Port: LongInt): Cardinal; stdcall; external 'ICC_32.DLL';
function ICC_Close_Port(): Cardinal; stdcall; external 'ICC_32.DLL';
function ICC_Verify(Lc: Cardinal;var Pin: PChar): Cardinal; stdcall; external 'ICC_32.DLL';
function GetPersonalInfo(var Info: PChar): Cardinal; stdcall; external 'ICC_32.DLL';

========================Delphi引用===============================
在ICC_Open_Port和ICC_Close_Port都是正常的,而在ICC_Verify和GetPersonalInfo就是不能正常返回数值,且调用函数返回值也是失败。请教大家是否引用定义错了,传 动态数组参数?

紧急寻求大家帮助!谢谢
...全文
829 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fox600123 2012-04-18
  • 打赏
  • 举报
回复

楼主是怎么解决的?小弟现在也面对一模一样的问题,请楼主指点一下,谢谢!!!
fullhappy 2011-10-10
  • 打赏
  • 举报
回复
这是去年的事情,已经都搞定了,其实比较简单的
l896993615 2011-07-04
  • 打赏
  • 举报
回复
ref 关键字来指明传递的是参数地址
l896993615 2011-07-04
  • 打赏
  • 举报
回复
ref 关键字来指明传递的是参数地址
柯本 2010-02-26
  • 打赏
  • 举报
回复
直接用pchar不用var pchar试试
(可能ref string只是一个字符串指针)
gyk120 2010-02-26
  • 打赏
  • 举报
回复
ref string应该是个数组吧?可能用指针的方式有问题,把Pin定义成数组可以吗?
返回类型 函数名 ( 参数类型 参数1,参数类型 参数2,...) Long HelpMe() 输出帮助文件到当前目录。 string GetWindowHandleForExe ( string exename) 说明:根据EXE文件名,返回该程序的当前窗口句柄,出错或无窗口返回-1 long HideTaskBar ( Boolean yesno ) 说明:隐藏系统任务栏,参数 yesno 为逻辑型,为真隐藏,为假恢复 long SetWinDiaph ( long winhd,int diaph ) 说明:设置窗口的透明度,参数说明:winhd 要设置透明的窗口的句柄; diaph 窗口的透明度,为0 完全透明 255 不透明。 long HideDesktopIcon( Boolean yesno ) 说明:隐藏桌面图标 参数 yesno 为真隐藏,为假显示 String GetWinTC (Long winhd,Int TorC) 说明:取指定窗口的标题或类名,参数说明:winhd 窗口句柄;TorC 为0 取窗口类名,为1取窗口标题 Boolean IsExeRun( String exename ) 说明:判断 exename 是否在运行。在运行返回真,没在运行返回假。 String GetComputerNameOrIP( String iporname ) 说明:返回指定的计算机名或IP地址,参数 iporname 输入为计算机名则返回该计算机的IP,输入为IP地址则返回该IP的计算机名,输入空返回本机名,输入字符"0" 返回本机IP。 String GetMac( String Iporanme ) 说明:返回指定计算机网卡的MAC值,参数:iporname 可以输入IP地址或计算机名,输入为空,返回本机网卡MAC值。 String GetHDDInfo( Int Hddn) 说明:返回指定硬盘的信息。 参数 hddn 指定硬盘,0 为磁盘0,1为磁盘1... 返回的硬盘各项信息中间用“;”间隔,顺序如下: 型号;版本号;序列号;容量;缓存大小;每磁道扇区数;磁头数;柱面数 String GetBiosMsg() 说明:返回本机主板的BIOS信息,返回的BIOS信息各项中间用“;”间隔,顺序如下: 名称;制造商;版权信息;日期;序列号;OEM信息 String GetCPUInfo() 说明:返回本的CPU信息,返回的CPU信息各项中间用“;”间隔,顺序如下:制造商;名称;时钟频率;描述;一级缓存大小;二级缓存大小;序列号;数据位宽度 String GetCuuentEXE() 说明:返回正在调用DLL文件的程序名称。 Boolean CDiskIn() 说明:检测光驱是否有光盘,返回真有,返回假没有 Long OpenCDrom( Boolean yesno ) 说明:弹出光驱或关闭光驱,参数 yesno 为真弹出,为假 关闭。 Long MouseClick(int x,int y,int flag) 说明:模拟鼠标点击,参数:x: 点击鼠标的X坐标; y: y坐标;flag: 0,左键单击;1,左键双击;2,右键单击;3右键双击 Long KeySim( int key1,int key2,int key3 ) 说明:模拟按键,参数:key1:按键1;key2:按键2;key3:按键3 ,key2,key3 不用时,输入0。 String GetAreaCode( string gbk ) 说明:返回汉字的区位码。 Long DisWinKey( Boolean yesno ) 说明:屏蔽WIN键,参数:yesno 为真时屏蔽,为假不屏蔽。 Long GetWHDOnPoint() 说明:取鼠标所在窗口的句柄。 Boolean SetScrRat(int width,int height) 说明:设置屏幕分辨率 String GetCDDrive() 说明:返回光驱的盘符 Boolean AddRTMenu( String ext,String title,String comd ) 说明:添加右键菜单,参数: ext:文件扩展名;title:菜单标题;comd:命令行 Boolean DelRTMenu( String ext,String title ) 说明:删除右键菜单,参数: ext:文件扩展名;title:菜单标题 Boolean GetPotRGB(ref int r,ref int g,ref int b) 说明:取得当前鼠标处颜色值RGB,分别存放到变量(R,G,B)中。 Boolean TestPort( int port,string svrIP ) 说明:检测指定机器的端口是否开放,参数:port:要检测的端口;svrip 指定机器的IP或机器名。 Long TestPing( string serip,int outime ) 说明:机器通信检测,能正常通信返回响应时间,否则返回-1,参数:serip 指定机器IP或名称;outtime 最长等待时间,单位秒 Long SetFileModifyTime( String filena,DateTime ftime ) 说明:设置文件的修改时间,参数:filena 文件名;ftime 指定日期时间。 String ToOtcHex( int source,int OtcHex ) 说明:将十进制的整数转换成十六进制或八进制,参数:source 要转换的十进制整数;OtcHex : 输入8转换成八进制数,其它转换为十六进制数。 String ToUPNum( dec source,Boolean UD ) 说明:将双精度的小数转换为大,参数:source 要转换的双精度小数;UD 为真是为简体(千),为假时为繁体(仟), String ToRMB( dec source,Boolean UD ) 说明:将双精度的小数转换为金额,参数:source 要转换的双精度小数;UD 为真是为简体(千),为假时为繁体(仟), Boolean SetSYSTime( Datetime dt ) 说明:设置系统的时间,参数:dt 指定的系统时间。 Integer GetDaysOfMth( int year,int month ) 说明:取某年某月的天数, 参数:year:为年份,month:为月份。 Boolean CloseSYS( int mode,Boolean yn ) 说明:关闭Windows系统,参数:mode : 1.关机 2.重启 3.注销 4.睡眠 5.休眠; yn: 为真强制执行,为假等待其它程序正常结束后执行。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧