DELPHI:EEncodingError - Windows XP嵌入式系统上的无效代码页

4

您好,我有一个应用程序在Windows XP专业版、Windows Vista和Windows 7上运行良好。

但是,在Windows XP嵌入式系统上运行时,它无法正常工作,并显示以下错误:

EEncodingError - 无效的代码页

当使用Delphi 2006制作应用程序时,它可以在Windows XP嵌入式系统上运行。

**当使用Delphi 2010制作应用程序时,它无法在Windows XP嵌入式系统上运行。**

2个回答

4

TEncoding.ASCII 属性使用的是代码页 20127,这个代码页在 XP 嵌入式系统中默认没有安装,你需要手动安装。在 D2006 中,TEncoding 类不存在。

你是否恰好正在使用 Indy 10?它默认使用 TEncoding.ASCII 作为字符串编码方式。当在 XP 嵌入式系统上使用 Indy 时,这种精确错误已知会发生。


1
谢谢 - 启用 copepage 20127 - 问题已解决 :) - Charles Faiga
1
就此而言,Indy 10不再依赖于代码页来支持ASCII。它在内部实现了自己的“TIdASCIIEncoding”类。 - Remy Lebeau

0

它什么时候崩溃?在启动时还是稍后?

这个错误只在RTL中的一个地方找到,至少是在SysUtils中。在SysUtils中,constructor TMBCSEncoding.Create(CodePage, MBToWCharFlags, WCharToMBFlags: Integer);,它被TEncoding调用来设置字符串编码。

它获取CodePage参数并对其调用GetCPInfo,如果失败则引发此异常。从MSDN文档和异常消息来看,可能正在发生的情况是您的应用程序正在尝试使用XP Embedded不支持的多字节字符集中的字符串。您是否在使用使用不同字母表的外语字符串或文本工作时做了任何不寻常的事情?


@Masson,它在启动时崩溃了,我没有做任何不寻常的事情+所有文本都是英文。 - Charles Faiga
@Charles:奇怪。你能在XP嵌入式系统下运行BDS吗?这听起来像是Delphi调试器的工作。 - Mason Wheeler
1
此外,尝试创建一个“Hello, World”Delphi项目,并查看它是否在嵌入式XP上运行。这应该能减少你的疑难解答时间。 - Chris Thornton
@Marjan:这是Delphi的惯用语。当DLL中的C代码期望一个指向值的指针以便修改它时,只要你不需要传递nil,你就可以将其声明为var参数而不是指针,这样你就可以得到更易读的代码。如果你查看Windows.pas中GetCPInfo的声明,就会发现它正是这样做的。 - Mason Wheeler
@Mason:感谢你的解释。有时我觉得 Delphi 把那些尖锐的东西屏蔽得太多了,但是反过来说,我很高兴它这样做... - Marjan Venema
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接