导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2022/5/11 11:36:42
标题:
加入我的收藏
楼主:
什么都没做, 写点字符就报错?
此帖子包含附件: 大小: 46.5K
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2022/5/11 16:00:04
1楼:
确实很神奇,试了一下一样的。 不知道memo加一行,会在哪里SetLastError了5?以及为什么?
----------------------------------------------
Bye bye DDRFAN...
作者:
2022/5/11 16:58:17
2楼:
@ddrfan 怎么解决? 被经理骂死了,
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2022/5/11 18:03:25
3楼:
SendTextMessage(Memo.Handle, EM_REPLACESEL, CanUndoAfterEM_REPLACESEL[Memo.CanUndoSelText], Line); 他说不行。 刚刚试了一下 D7 也一样。
----------------------------------------------
(C)(P)Flying Wang
作者:
2022/5/11 19:09:33
4楼:
管理员权限运行也这样吗?
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/ >http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
vkow (vkow)
★☆☆☆☆
-
普通会员
2022/5/11 20:19:09
5楼:
你这个是无意义的调用。 GetLastError调用的前提是已知前面的函数会设置GetLastError。 没有异常发生的时候。取决于前面的函数是否把ErrorCode复位成0。 很多函数根本不去复位,因为GetLastError对他来说无意义。
----------------------------------------------
-
作者:
vkow (vkow)
★☆☆☆☆
-
普通会员
2022/5/11 20:21:15
6楼:
换句话说,就是并不是所有的函数都靠GetLastError传递异常信息。 至于具体哪些,需要的都在SDK文档中都注明了。
----------------------------------------------
-
作者:
2022/5/11 21:15:03
7楼:
@vkow 我把那行add删除就不报错了. 你怎么说?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2022/5/11 21:16:07
8楼:
@vkow 你说无意义的调用, 那GetLastError 并不是针对上一行有错误, 假如并发时, 你怎么初始化? 都可以冲突.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2022/5/11 21:25:09
9楼:
GetLastError确实不一定是上一行的错误,是之前哪个函数内SetLastError了。 但是LZ遇到这个问题诡异地方在于: 错误5-拒绝访问。是有了memo.lines.add(XXX)之后才产生的。 如果去掉memo这一行,那么就不会有错。 会报0-操作成功完成。 当然,我也不知道咋回事,盼望高手作答。。。
----------------------------------------------
Bye bye DDRFAN...
作者:
vkow (vkow)
★☆☆☆☆
-
普通会员
2022/5/11 23:32:09
10楼:
这是windows的系统异常处理机制造成的。 通常在系统判断的时候,申请系统资源的时候,就会触发各种异常。这种异常你可以简单的理解为if else就行。对于应用外层来说是无意义的。 需要你关心ErrorCode的时候,会在API介绍中注明的。否则你得到的GetLastError都不知道是多少层之内的函数调用产生的,而且都已经处理过了。 具体你说,memo.lines.add(XXX)之后才产生的。这只能从代码中一层一层去找。 另外,有异常,不叫有错误。异常是一套编程处理机制。 你不能说if 后面的是对的,else后面是错的。 给你看看系统页面处理时会触发多少异常。但都是无意义的,你不能说这程序是错误的。
此帖子包含附件: 大小: 160.6K
----------------------------------------------
-
作者:
hs_kill (lzl_17948876)
★☆☆☆☆
-
普通会员
2022/5/12 10:03:47
11楼:
很多情况下, 代码是通过抛出异常来跳过某些执行过程, 就像vkow说的那样和if else或者case起到的效果一样 也许就是add内部的某些操作, 判断在能获取到权限时需要执行一些东西, 但是此时没权限就抛出了拒绝访问的异常跳过了这段代码, 但是这部分又不影响主要业务的执行
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
2022/5/12 10:13:38
12楼:
@hs_kill 那GetLastError的意义何在? 也就是说默认情况下, 就有错误? 或者说即使是1+1=2 这种代码, 也可能会有Error? add那行加了, 它才报错, 所以可以肯定程序启动时, 是没有任何错误的. 也就表示错误是后期程序增加上去的, 而底层并没有理会这个错误, 仅seterrorcoder后, 继续工作. 那还怎么写代码?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2022/5/12 14:21:15
13楼:
delphi – 调用postmessage返回“访问被拒绝” - 编程之家 https://www.jb51.cc/delphi/732135.html 微软 就喜欢 瞎搞。
----------------------------------------------
(C)(P)Flying Wang
作者:
2022/5/12 20:41:03
14楼:
看了楼上的, 原来是postmessage,有道理。。。 楼主的问题“GetLastError的意义” 应该是用在明确知道上一句代码会SetLastError的情况下, 一般也就是调用系统啥功能后,马上看看调用成功没(以及错误具体原因)。 比如我专门记的这篇里面有不少类似的:https://blog.csdn.net/ddrfan/article/details/85291991 哎,怎么是C的。。。反正意思一样。
----------------------------------------------
Bye bye DDRFAN...
作者:
flcop (flcop)
▲▲▲▲△
-
普通会员
2022/5/12 21:36:30
15楼:
脱离API来调用GetLastError是没有意义的,具体如何使用必须参考API文档,因为并非所有的API都会关心,按照楼主意思,主窗体OnCreate事件里第一行GetLastError就有错,是不是程序就有问题,不用运行了?
----------------------------------------------
-
作者:
hs_kill (lzl_17948876)
★☆☆☆☆
-
普通会员
2022/5/13 10:09:43
16楼:
@tuesdays如果你经常用winAPI就会发现, 几乎所有的API都有成功或失败的返回值 而GetLastError的用法也是在返回值失败的情况下去调用 也就是说这部分代码的设计逻辑是: 内部通过各种异常来处理不同的业务逻辑 有的异常是可以忽略的, 有的异常时不可以忽略的 可以忽略的异常, 有的吧错误信息归位了, 有的没归位, 这部分不强制, 但是无论是否归位都不影响业务的继续执行, 并且执行结果是正常的 不可以忽略的异常会导致业务中断, 这时候会产生错误的执行结果 所以首先要判断函数执行结果是否正确, 在不正确的情况下才需要用GetLastError获取最后的错误信息来判断为什么不正确 以上只限于winAPI, 而delphi里对异常的使用更倾向于实际意义上的异常: 绝大部分异常都在会影响业务执行时出现 至于那种用法更好, 这个看个人理解, 我觉得无所谓, 异常并不代表错误, 而是代表意料之外的情况
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
2022/5/16 14:00:30
18楼:
15 16楼 说的都不错。都很厉害。
----------------------------------------------
(C)(P)Flying Wang
作者:
2022/5/23 11:23:11
19楼:
加个TApplication吧,不用GetLastError
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
2022/5/23 11:24:56
20楼:
会不会是memo的事件中加了一些东西,而你忘记了。
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2022/5/23 11:31:20
21楼:
不同体系不同的异常处理机制而已;如 Win32 开发的 LastError;如 COM 开发中 Safecall/HRESULT;如 VCL 的 Raise/Exception 用啥体系遵守啥体系规范 ~
----------------------------------------------
-
作者:
kaida (kaida)
★☆☆☆☆
-
盒子活跃会员
2022/5/24 17:57:40
22楼:
楼主解决问题了吗: 估计是 TMemo 的问题。 这样写就正常: procedure TForm1.BitBtn1Click(Sender: TObject); var L: TStringList; begin L := TStringList.Create; try L.Text:=memo1.Text; L.Add('写点字符没问题。'); Memo1.Lines.Text:=L.Text; ShowMessage(SysErrorMessage(GetLastError())); finally L.Free; end; end;
----------------------------------------------
http://down.desei.com.cn/down/1041485/MyWeb/VCLs.html
作者:
2022/5/25 4:53:40
23楼:
better read this post! http://bbs.2ccc.com/topic.asp?topicid=629182
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3