pb 调用dll 寻找路径的问题

大剑人 2014-07-24 11:14:24
用pb开发,被调用的dll放在程序所在的路径下,编译后exe运行没问题,调试运行的时候,报错无法找到dll里面的某个函数。
请问,pb调试运行的时候,是按照什么顺序寻找dll的。
...全文
2988 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guitar100 2016-05-27
  • 打赏
  • 举报
回复
编译一边就没有这个问题的了
大剑人 2014-08-17
  • 打赏
  • 举报
回复
引用 4 楼 lzp_lrp 的回复:
[quote=引用 楼主 monday707455915 的回复:] 用pb开发,被调用的dll放在程序所在的路径下,编译后exe运行没问题,调试运行的时候,报错无法找到dll里面的某个函数。 请问,pb调试运行的时候,是按照什么顺序寻找dll的。
看一下你的操作系统,如果是win7的话,建议把dll复制到pbXX.exe所在的目录下一份,应该就好了[/quote] 忙项目,很久没上。。。 遇到报错我通过两种方法可以解决这个问题: 1.把报错行注释,运行,然后关掉程序,把注释的出错行取消注释,这个问题就没了 2.把整个project编译一遍 原因未知,报错缺少的文件在程序目录下都有,在公司类库上开发就是会遇到一些莫名其妙的问题→_→
WorldMobile 2014-07-30
  • 打赏
  • 举报
回复
引用 楼主 monday707455915 的回复:
用pb开发,被调用的dll放在程序所在的路径下,编译后exe运行没问题,调试运行的时候,报错无法找到dll里面的某个函数。 请问,pb调试运行的时候,是按照什么顺序寻找dll的。
看一下你的操作系统,如果是win7的话,建议把dll复制到pbXX.exe所在的目录下一份,应该就好了
大剑人 2014-07-25
  • 打赏
  • 举报
回复
引用 2 楼 pb8 的回复:
楼上正解! 确定你在运行过程中没有调用改变文件路径的操作? 比如getfileopenname,getfilesavename,还有类似于dirlist函数,它们调用后当前路径都会改变
我记得以前有一次通过在注册表中加exe所在路径的方式解决过类似的问题,不过现在忘记从哪里添加了,我现在遇到的问题是,程序刚开始运行的时候,类库初始化调用一些函数,就报错了
pb8 2014-07-24
  • 打赏
  • 举报
回复
楼上正解! 确定你在运行过程中没有调用改变文件路径的操作? 比如getfileopenname,getfilesavename,还有类似于dirlist函数,它们调用后当前路径都会改变
做梦的猫 2014-07-24
  • 打赏
  • 举报
回复
开发模式和发布模式都一样,先在当前目录(工程或 EXE 所在目录),再到系统目录(SYSTEM32 之类),再就是环境变量 PATH 设置的搜索路径。
/这个是一个成功的声明 FUNCTION int fsendemail(ref String sSmtpServer, ref String sSenderId, & ref String sPsw, ref String sSenderName, ref String sRcvAddr,& ref String sSenderAddr,ref String sCCAddr, & ref String sBCCAddr, ref String sSubject, & ref String sContent, ref String sAttach) Library "PSdEmail_dll.dll" 代码如下 //mail_url放邮件地址,as_mailtext放邮件内容,mail_cc是邮件的抄送地址 //as_subject是邮件主题,as_filename是附件的文件名,as_pathname是附件的完整路径名 string ls_name mailsession lms_data mailmessage lmms_message mailreturncode lmr_value integer li_i //产生邮件会话对象mses lms_data = create mailsession //邮件登录 lmr_value = lms_data.maillogon(mailnewsession!) if lmr_value mailreturnsuccess! then gnv_base.of_message("真不幸,邮件注册失败") return -1 end if //标题 lmms_message.subject = sle_subject.text //正文 lmms_message.notetext = trim(mle_content.text) + ' ' ////附件 //if as_pathname '' or as_filename '' then // mmsg.attachmentfile[1].pathname=as_pathname // mmsg.attachmentfile[1].filename=as_filename //end if //******************************校验收件人邮件地址是否是合法地址***************************// //原收件人 ls_name = sle_rcv.text lmr_value = lms_data.mailResolveRecipient(ls_name) if lmr_value = mailReturnSuccess! THEN lmms_message.Recipient[1].RecipientType = mailto! lmms_message.Recipient[1].address = "liuzhp@huadong.net" lmms_message.Recipient[1].name = "liuzhp@huadong.net" elseif lmr_value = mailReturnFailure! THEN gnv_base.of_message('收件人地址错误,请检查') return -1 else gnv_base.of_message('收件人地址错误,请检查') return -1 end if //发送邮件 lmr_value = lms_data.mailsend(lmms_message) if lmr_value mailreturnsuccess! then messagebox("邮件发送","邮件发送失败!"+char(10)+char(13)+'请检查:'+char(10)+char(13)+& '1.附件路径和名称是否正确.'+char(10)+char(13)+& '2.本地outlook配置是否正确.'+char(10)+char(13)+& '3.如以上都正确,请与系统管理员联系!') return -1 elseif lmr_value = mailreturnsuccess! then // messagebox("邮件发送","邮件发送完毕!") end if lms_data.maillogoff() //退出登录 destroy lms_data //取消邮件会话 return 1 String ls_RcvAddr //收件人 String ls_CcAddr //转发 String ls_BccAddr //暗送 String ls_Sub //主题 String ls_Content //内容 String ls_Attach = ''//附件,多个附件由ATTACHSPLIT分隔 Constant String ATTACHSPLIT = '|' //附件的分隔符号 Integer li_Rtn //返回值,0:发送成功,1:发送失败 pointer oldpointer // Declares a pointer variable oldpointer = SetPointer(HourGlass!) ls_RcvAddr = sle_Rcv.Text //收件人 ls_CcAddr = sle_CC.Text //转发 ls_BccAddr = sle_BCC.Text //暗送 ls_Sub = sle_Subject.Text //主题 ls_Content = mle_Content.Text //内容 Long ll_Row, ll_RowCnt //把附件用ATTACHSPLIT连接起来 ll_RowCnt = dw_Attach.RowCount() FOR ll_Row = 1 TO ll_RowCnt ls_Attach = ls_Attach + dw_Attach.Object.FilePath[ll_Row] +& dw_Attach.Object.FileName[ll_Row] + ATTACHSPLIT NEXT //发送 li_Rtn = fSendEmail(is_Server, is_SenderId , is_Psw, is_SenderName, is_SenderAddr,ls_RcvAddr, ls_CcAddr, ls_BccAddr, ls_Sub, ls_Content,ls_Attach) if li_rtn = 0 then gnv_base.of_message('邮件发送成功!') else gnv_base.of_message('邮件发送失败!') end if SetPointer(oldpointer) li_Rtn = fSendEmail(is_Server, is_SenderId , is_Psw, is_SenderName, is_SenderAddr, & ls_RcvAddr, ls_CcAddr

680

社区成员

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

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