DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: g929959149
今日帖子: 25
在线用户: 7
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tuesdays (Tuesday) ▲▲▲△△ -
注册会员
2022/5/11 11:36:42
标题:
为什么它提示拒绝访问? 浏览:526
加入我的收藏
楼主: 什么都没做, 写点字符就报错?
此帖子包含附件:
PNG 图像
大小:46.5K
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 ddrfan (若苗瞬) ▲▲▲▲△ -
注册会员
2022/5/11 16:00:04
1楼: 确实很神奇,试了一下一样的。
不知道memo加一行,会在哪里SetLastError了5?以及为什么?
----------------------------------------------
Bye bye DDRFAN...
作者:
男 tuesdays (Tuesday) ▲▲▲△△ -
注册会员
2022/5/11 16:58:17
2楼: @ddrfan
 怎么解决?  被经理骂死了,
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2022/5/11 18:03:25
3楼: SendTextMessage(Memo.Handle, EM_REPLACESEL, CanUndoAfterEM_REPLACESEL[Memo.CanUndoSelText], Line);
他说不行。

刚刚试了一下 D7 也一样。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 keymark (嬲) ▲▲△△△ -
注册会员
2022/5/11 19:09:33
4楼: 管理员权限运行也这样吗?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速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文档中都注明了。
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲△△ -
注册会员
2022/5/11 21:15:03
7楼: @vkow 
我把那行add删除就不报错了.  你怎么说?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲△△ -
注册会员
2022/5/11 21:16:07
8楼: @vkow
你说无意义的调用,  那GetLastError 并不是针对上一行有错误, 
假如并发时, 你怎么初始化? 都可以冲突.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 ddrfan (若苗瞬) ▲▲▲▲△ -
注册会员
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后面是错的。

给你看看系统页面处理时会触发多少异常。但都是无意义的,你不能说这程序是错误的。
此帖子包含附件:
JPEG 图像
大小:160.6K
----------------------------------------------
-
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2022/5/12 10:03:47
11楼: 很多情况下, 代码是通过抛出异常来跳过某些执行过程, 就像vkow说的那样和if else或者case起到的效果一样

也许就是add内部的某些操作, 判断在能获取到权限时需要执行一些东西, 但是此时没权限就抛出了拒绝访问的异常跳过了这段代码, 但是这部分又不影响主要业务的执行
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 tuesdays (Tuesday) ▲▲▲△△ -
注册会员
2022/5/12 10:13:38
12楼: @hs_kill
那GetLastError的意义何在? 也就是说默认情况下, 就有错误? 
或者说即使是1+1=2 这种代码, 也可能会有Error? 

add那行加了, 它才报错, 所以可以肯定程序启动时, 是没有任何错误的. 
也就表示错误是后期程序增加上去的, 而底层并没有理会这个错误, 仅seterrorcoder后, 继续工作. 

那还怎么写代码?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2022/5/12 14:21:15
13楼: delphi – 调用postmessage返回“访问被拒绝” - 编程之家
https://www.jb51.cc/delphi/732135.html

微软 就喜欢 瞎搞。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ddrfan (若苗瞬) ▲▲▲▲△ -
注册会员
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/
作者:
男 tuhemm (刀锋土禾) ▲△△△△ -
注册会员
2022/5/14 0:41:48
17楼: 进来看看,支持一下
----------------------------------------------
自闭症训练机构|语言矫正中心|儿童康复中心|语言康复机构|儿童发音矫正|
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2022/5/16 14:00:30
18楼: 15 16楼 说的都不错。都很厉害。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2022/5/23 11:23:11
19楼: 加个TApplication吧,不用GetLastError
----------------------------------------------
https://shop66090024.taobao.com/?spm=a313o.7775905.1998679131.d0011.6f6f2796Z7e3JX
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2022/5/23 11:24:56
20楼: 会不会是memo的事件中加了一些东西,而你忘记了。
----------------------------------------------
https://shop66090024.taobao.com/?spm=a313o.7775905.1998679131.d0011.6f6f2796Z7e3JX
作者:
男 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
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行23.4375毫秒 RSS