微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 VB6 应用程序中处理 DLL 错误消息的编码/本地化?

如何解决如何在 VB6 应用程序中处理 DLL 错误消息的编码/本地化?

更新:这个问题在更好地理解发生了什么之后得到更新,我删除了嘈杂的错误部分。)

这段代码属于 COM DLL。对于上下文,它包含一个在经典 ASP 页面中创建和处理的 ActiveX 对象。

Public Function getHttpResponse(url As String)
  Dim request As New WinHttpRequest
  
  On Error GoTo errGetHttpResponse
  request.Open "HEAD",url
  request.Send
  getHttpResponse = request.Status
  Exit Function
  
errGetHttpResponse:
  getHttpResponse = Err.Description
End Function

Err.Description 字符串本地化和编码似乎依赖于运行环境。对于错误 80072EE5,我得到 Err.Description(从加载 DLL 的可执行文件的 GUI 中检索):

  • 机器 1,Windows 2008 SP2 32 位,法语:L'URL n'est pas valide
  • 机器 2,Windows 2012 R2 标准 64 位,法语:L’URL n’est pas valide,hexdump 给出:

值得注意的是,撇号不一样。

调用显示 ActiveX 输出的 ASP 页面可以这样简化:

Session.LCID=1036 ' french identifier (global.asa file)
Dim o : Set o = CreateObject("TheDLL.TheObject")
Response.Write o.getHttpResponse(anInvalidUrl)

虽然从机器 1 运行它可以正确呈现,但从机器 2 开始,撇号被隐藏(在 Firefox 上查看源代码显示一个 00 92 方形字符)。机器 2 生成的 HTML 复制如下:

00000000  4c 92 55 52 4c 20 6e 92  65 73 74 20 70 61 73 20  |L.URL n.est pas |
00000010  76 61 6c 69 64 65                                 |valide

撇号被编码为 0x92,这是在 ISO-8859-1 中编码的 RIGHT SINGLE QUOTATION MARK

差异如何解释?是否有办法设置与平台无关的输出

(是的,这是一个即将消亡的遗留代码。)

解决方法

在评论部分与 Remy Lebeau 和 GSerg 进行了深入讨论后,以下是理解差异的关键:

  • 字符串由 VB6 以 UTF-16 处理,但它们的输出方式取决于上下文
  • 错误消息可能因实现而异(这可以解释为什么撇号从 L'URL 更改为 L’URL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。