再叙PB7获取当前路径问题

neil 2002-08-28 02:07:32
环境:WINDOWS2000, PB7,MSSQL
已知如下方法可以获取程序当前路径:
FUNCTION ulong GetCurrentDirectoryA(ulong BufferLen, ref string currentdir) LIBRARY "kernel32.dll"

在程序的open事件里加入代码
ulong l_buf
l_buf = 250
gb_str_exefilepath = space(l_buf) //全局变量存放路径
GetCurrentDirectoryA(l_buf,gb_str_exefilepath)

程序安装至x:\progra~1\之后,将主程序的快捷方式放至桌面,点快捷方式运行程序后竟然用GETCURRENTDIRECTORY获得的是 X:\DOCUM~1\......
请教了:如何有如此变化?又如何避免这样的获取呢?谢谢
...全文
56 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzhaohua 2002-08-28
  • 打赏
  • 举报
回复
chinee.yeah.net
有一个 "获取应用路径的uo"
可以在开发环境和 exe 环境取得应用路径
使用的算法避免了 exe 文件名过长时的乱码(如 ?)现象

假设所用 pbl 和 exe 均在 c:\temp\ 文件夹下
返回形式
开发环境 "c:\temp\"
运行环境 "c:\temp\"
hzhxxx 2002-08-28
  • 打赏
  • 举报
回复
楼上的对,要把我的改写一下

1. 不 compile 的时候
得到 D:\PB7\PowerBuilder 7.0\pb70.exe

2. compile 后(假如我在 d:\dd\dd\dd\ 为 a 的 application)
是 得到 d:\dd\dd\dd\a.exe

你处理一下,即可!

还有,你说的创建快界方式的问题是没有的!



luoyefeng 2002-08-28
  • 打赏
  • 举报
回复
GetCurrentDirectoryA是得到上一次的文件目录路径,可以这样试一下:在程序中使用GetCurrentDirectoryA语句之前,先使用getfileopen函数,得到一个新的文件路径,这是你会发现GetCurrentDirectoryA得到的就是getfileopen一样的路径,而不是程序当前的路径;
实际上应该是hzhxxx(程序方程) 的GetModuleFileNameA 才对,它得到的就是当前应用的路径,当然,你在pb环境下,得到的就是pb安装的路径,当前的路径嘛,得到的是绝对路径,但改一下就可以是相对路径了,这应该很简单吧
hzhxxx 2002-08-28
  • 打赏
  • 举报
回复
我测试 一下!
neil 2002-08-28
  • 打赏
  • 举报
回复
未解决,期待好答案中。。。
jzhaohua 2002-08-28
  • 打赏
  • 举报
回复
hzhxxx(程序方程) 老大
GetModuleFileNameA 得到的是应用的绝对路径, 如 c:\aa.exe

关注
hzhxxx 2002-08-28
  • 打赏
  • 举报
回复

//*************************************************//
//function : 得到当前应用的路径
//parm : (none)
//return : 应用的路径
//author : hzh
//date : 2002.04.29
//************************************************//

//Function uint GetModuleFileNameA(ulong hModule,ref string lpFilename,ulong nSize) Library "kernel32.dll"

//要 compile 有效

string ls_Buffer=Space(255)

IF GetModuleFileNameA(handle(ga_app),ls_Buffer,255) = 0 THEN
SetNull(ls_Buffer)
else
if right(ls_buffer,1) <> '\' then ls_buffer += '\'
end if

RETURN ls_Buffer
WorldMobile 2002-08-28
  • 打赏
  • 举报
回复
在你的快捷方式图标上,单击右键,选择属性,把起始位置改一下即可

如果目标为:"D:\Program Files\Examis\runtime\exammis.exe"

那么起始位置应为:""D:\Program Files\Examis\runtime\"

当前程序所在的文件夹名

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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