函数原型DWORD StartSession_v2 (LONG LockCard, LONG Version,LPSTR Server,LPSTR LogUser);用delphi 调用StartSession_v2(software,version,pchar(s),'DllUser');其中 s 是string 形用PB调用的话网上很多人都说这种调用方法Function string startsession_v2(long lockcard,long version,ref string server,ref string loguser)Library "LockDll.Dll"sting ss='192.168.1.1'StartSession_v2(2,9,ref s,'DllUser');但是我写上去程序一直要报错,也不知道什么原因哪位高手能帮下小弟吗?不甚感激谢谢 wforce 的回答。不过源函数是字符型指针,用PB调用直接用string 不行吧。我照你的方法写进去了。但还是要报错的。 youyuan1688 回答的应该是正确答案了,不过我不知道怎么写代码。//server1 = '150.0.1.251'//server2 =space(255)//server=lstrcpy(server2,server1)
2 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
sting s,ls_user
s='192.168.1.1'
ls_user = 'DllUser'
StartSession_v2(2,9,s,ls_user)
----
很遗憾,PB不支持指针
qq_笑_17
TA贡献1818条经验 获得超7个赞
为字符串分配的空间不足,你试试直接用字符数组看看。对于一般的out成员,在PB中需要先为字符串分配空间,一般也就是用space(255)这样来做,但你这个是in out的,字符串可能比较难处理,可选的也就只有数组和blob两个了,用数组的时候用定长255的数组,动态数组还是没有分配空间的
原来不是这个问题,这个问题有两点,第一你在PB中声明的时候大小写没有注意,这个如果没有alias,这样是不行的,大小写必须和DLL中一致(有alias则 alias for 后面的那个字符串与DLL中的一致),二必须DLL中的函数正常运行才行,否则PB总是报一样的错误的,测试表明,你的LockDll.Dll需要其它DLL的支持才能正常运行。你只要将所有的DLL拷贝到PBt所在的目录,然后这样声明外部函数就成了:Function long StartSession_v2(long lockcard,long version,string server,string loguser) Library "LockDll.Dll"
都是普通参数使用我就不多少了,因为我没有正确的SQLServer数据库只能得出-53247,也就是FFFF3001,连接SQL出错了
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消