delphi - 如何为 VBScript 错误获取更具声明性的字符串

标签 delphi winapi com activex

只是为了解释有关上下文的更多信息,这是重现的方法:

  • Delphi 7(但也许还有更新的版本)
  • 导入类型库“Microsoft VBScript 正则表达式 5.5”

围绕这段代码编写一个程序:

var
  re:RegExp;
try
  re:=CoRegExp.Create;
  re.Pattern:='(';//is an invalid regex, but see below
  re.Test('');
except
  on e:Exception do
    Caption:=e.ClassName+' '+e.Message;
end;

这将引发异常EOleError OLE错误800A139C

这样做是因为 SysErrorMessage 在此代码上返回一个空字符串,并且 EOleSysError 构造函数默认使用 SOleError 资源字符串来返回某些内容。

是否有 WinAPI 替代 SysErrorMessage 来获取更好的错误描述?如果我用谷歌搜索一下,代码确实代表“缺少括号”错误,但如果有一种方法可以从系统获取(本地化)描述,我更愿意使用它,而不是添加枚举我的项目的错误描述常量。

最佳答案

这是一个 COM error 。要获取文字描述,请调用 GetErrorInfo然后IErrorInfo.GetDescription 。但如果您没有得到任何有用的返回,请不要感到惊讶。

关于delphi - 如何为 VBScript 错误获取更具声明性的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036626/

相关文章:

delphi - Firemonkey中的自定义网格

multithreading - 简单线程示例 Delphi

c++ - dll 注入(inject) - 简单的主要

c# - .NET WebBrowser 控件是否可以使用 IE9?

具有动态接口(interface)的 C# COM 对象

delphi - EnumResourceNames 返回 Windows 错误 998(对内存位置的访问无效)

delphi - 捕获任何 VCL 组件上的鼠标单击,并确定其 .Tag 值

c++ - 如果发送进程停止,boost::interprocess::timed_receive() 永远不会返回

c++ - 当 hModule 和 lpProcName 有效时 GetProcAddress 返回 NULL

java - 使用串行通信在微 Controller 上写入数据时出现问题