| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1179 人关注过本帖
标题:返回上一调用文件名,PROGRAM()及SYS(16) 如果做才能得到上一层调用文件名 ...
只看楼主 加入收藏
zhken
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:283
专家分:616
注 册:2012-9-21
结帖率:96.67%
收藏
已结贴  问题点数:1 回复次数:6 
返回上一调用文件名,PROGRAM()及SYS(16) 如果做才能得到上一层调用文件名?
用PROGRAM()只能返回       ,就是要得到是那个调用文件名出错了。
SYS(16) 只能得到一开始调用的名。
比如我调用了N个表单,然后在当前表单执行一个按钮,出错了,调用出错程序。就要取得这个出错按钮所在的文件名。
用PROGRAM()只能返回 。这个FORM1对等的DOS文件名是什么?
搜索更多相关主题的帖子: 返回 调用 文件名 PROGRAM 出错 
2019-06-26 11:27
zhken
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:283
专家分:616
注 册:2012-9-21
收藏
得分:0 
SYS(16) 返回的是 PROCEDURE   SYS(16,1) 返回的是 主程序的名。期间调用了好多表单
2019-06-26 11:40
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:1 
用ASTACKINFO()看看
2019-06-26 12:21
zhken
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:283
专家分:616
注 册:2012-9-21
收藏
得分:0 
我可能说错了。我试了很多,返回的都是主程序名。ASTACKINFO(),也是返回主程序名。应该返回当前 表单 的名称。是表单名称。比如按钮出错,要返回是那一张表单的表单名。才知道是哪一张表单有问题。
2019-06-26 13:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用zhken在2019-6-26 13:38:23的发言:

我可能说错了。我试了很多,返回的都是主程序名。ASTACKINFO(),也是返回主程序名。应该返回当前 表单 的名称。是表单名称。比如按钮出错,要返回是那一张表单的表单名。才知道是哪一张表单有问题。

ASTACKINFO()应该可以满足要求
ASTACKINFO()返回的数组元素:
1 堆栈调用级别
2 当前程序文件名
3 模块或对象名
4 模块或对象源文件名
5 对象源文件中的行数
6 源文件内容
其中3、4、5、6元素值应该是想要的东西,可在捕捉错误处理过程中调用ASTACKINFO()来获得出错的过程和对象信息。
2019-06-26 14:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
回复 4楼 zhken
简单示例,看是不是这意思。
图片附件: 游客没有浏览图片的权限,请 登录注册

****** test.prg ******
ON ERROR do onerr
of1 = CREATEOBJECT("form1")
of1.show
RETURN

DEFINE CLASS form1 as Form
    WindowType = 1
    PROCEDURE init
        of2 = CREATEOBJECT("form2")
        of2.show  
    ENDPROC
ENDDEFINE

DEFINE CLASS form2 as Form
    top = 50
    left = 50
    WindowType = 1
    PROCEDURE init
        of3 = CREATEOBJECT("form3")
        of3.show  
    ENDPROC
ENDDEFINE

DEFINE CLASS form3 as Form
    top = 100
    left = 100
    WindowType = 1
    ADD OBJECT cmd1 as commandbutton WITH top=10,left=10,caption="test"
    PROCEDURE cmd1.click
        a = b
    ENDPROC
ENDDEFINE

PROCEDURE onerr
    ?
    FOR i=1 TO ASTACKINFO(arr)
        ?arr[i,3]
    ENDFOR
ENDPROC
2019-06-26 14:58
zhken
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:283
专家分:616
注 册:2012-9-21
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
已OK
2019-06-26 16:49
快速回复:返回上一调用文件名,PROGRAM()及SYS(16) 如果做才能得到上一层调用 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026304 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved