ArcObjects 错误代码
ArcObjects 错误代码
本主题概述了与 ArcObjects 相关的 HRESULT,并帮助您破译了在编程开发的过程中遇到的 HRESULT 错误代码。 本主题还介绍了 HRESULT 是什么,以及如何在 ArcObjects SDK For .NET 中找到有关这些错误代码的信息;还提供了使用 HRESULT 时经常需要的数字转换的详细说明。
HRESULT 错误代码
在 .NET 中使用 ArcObjects 进行编程时,您可以调用 COM 组件,因此,会收到来自 COM 组件的错误提示信息。
所有 COM 方法都会返回一个无符号整数 (HRESULT)。HRESULT 本质上是一个结构,用于指示所执行的函数是成功还是失败,并包含【有关操作结果的】其他详细信息。 HRESULT 的值,通常用于返回错误信息(未被特别视为错误代码)。
.NET 运行时处理来自 COM 组件的错误,类似于 VB 6 处理 COM 错误的方式。如果 .NET 程序调用 COM 组件中的函数,并返回错误条件(以 HRESULT 形式),则 HRESULT 会被填充到 COMException 的实例中去。此 COMException 由 .NET 运行时引发,可在 Try、Catch、Finally 块中进行处理。有关实现 Try、Catch、Finally 块和 COMException 的更多信息,请参阅 How to implement error handling。
ArcObjects 库的大多数 HRESULT 错误常量都记录在 ArcObjects SDK For .NET 的帮助系统中(请参阅本主题中的 ArcObjects HRESULT error codes ),该帮助系统作为 SDK 安装帮助的一部分,我们可从中获取到它;或从 ArcGIS Resource Centers Web 上的 ArcObjects namespace reference 中获取。
可以在 MSDN 网站上找到不特定于 ArcObjects 的 HRESULT。有关常见 MSDN HRESULT 值的列表,请参阅 MSDN 上的 Common HRESULT Values 。
定位 HRESULT
HRESULT 以 8 位十六进制形式 (80004005) 或 10 位十进制形式 (- 2147467259) 返回。大多数 ESRI ArcObject 的错误代码,都是 10 位十进制格式。
以下【ArcObjects HRESULT 错误代码表】列出了所有可用的错误代码页面(以超链接形式),以及每个库(dll)包含的 HRESULT 值范围。如果未列出某个库,则该库当前没有特定的 HRESULT 错误代码,不过,您会收到一般 COM 错误。
如果您收到 8 位十六进制错误代码,请将这个 8 位十六进制代码,转换为一个 10 位十进制代码。这种转换并不困难,可以使用 Windows 计算器完成。
一些 ArcObjects 库使用 3位的值,而不是 10 位十进制数值。这些库分别是
-
ESRI.ArcGIS.Geometry(esriGeometryError 和 esriSpatialReferenceError 枚举)
-
ESRI.ArcGIS.Geodatabase(esriDataConverterError 枚举)。
有关如何将一个 10 位十进制值,转换为一个 3 位枚举值的信息,请参阅本主题中的 Converting 10-digit decimal value to three-digit enumeration value 。
ArcObjects HRESULT 错误代码
Enumeration | Library | Min value | Max value |
---|---|---|---|
esriDataConverterError | Geodatabase | 513 | 532 |
esriGeometryError | Geometry | 513 | 602 |
esriSpatialReferenceError | Geometry | 514 | 524 |
cadastralError | Cadastral | - 2147221247 | - 2147220732 |
dimError | Carto | - 2147220991 | - 2147220989 |
annoError | Carto | - 2147220991 | - 2147220985 |
esriRasterLayerError | Carto | - 2147217152 | - 2147217152 |
esriImageServerError | Carto | - 2147216896 | - 2147216895 |
esriNETCDFError | DataSourcesNetCDF | - 2147217408 | - 2147217401 |
esriRasterLoaderError | DataSourcesRaster | - 2147217407 | - 2147217408 |
esriRasterError | DataSourcesRaster | - 2147217408 | - 2147217370 |
esriRepresentationDrawingError | Display | - 2147218431 | - 2147218425 |
esriEditorError | Editor | - 2147220990 | - 2147220990 |
esriSpatialAnalystError | GeoAnalyst | - 2147217408 | - 2147217248 |
esriXYEventError | Geodatabase | - 2147220991 | - 2147220983 |
esriNetworkErrors | Geodatabase | - 2147220991 | - 2147220879 |
fdoError | Geodatabase | - 2147220991 | - 2147212030 |
esriTinError | Geodatabase | - 2147219456 | - 2147219388 |
esriRepresentationError | Geodatabase | - 2147218687 | - 2147218670 |
esriGeoDataServerError | GeoDatabaseDistributed | - 2147208551 | - 2147208540 |
esriTerrainError | GeoDatabaseExtensions | - 2147205120 | - 2147219396 |
esriGeocodingError | Location | - 2147220991 | - 2147220969 |
esriRouteEventError | Location | - 2147220991 | - 2147220956 |
esriUtilityNetworkErrors | NetworkAnalysis | - 2147220911 | - 2147220225 |
esriExportErrorReturnCodes | Output | - 2147220735 | - 2147220719 |
esriOutputErrorReturnCodes | Output | - 2147220686 | - 2147220670 |
esriSchematicErrors | Schematic | - 2147218943 | - 2147218923 |
esriCoreErrorReturnCodes | esriSystem | - 2147221247 | - 2147221243 |
messageSupportError | esriSystem | - 2147220991 | - 2147220967 |
tascTMSWorkspaceError | TrackingAnalyst | - 2147220480 | - 2147220352 |
tascGSDCoreError | TrackingAnalyst | - 2147219456 | - 2147219392 |
tascTemporalLayerError | TrackingAnalyst | - 2147219199 | - 2147219135 |
将 8 位十六进制值转换为 10 位十进制值
(1)8位十六进制数,转成32位二进制数;
(2)32位二进制数,每位取反;
(3)取反后,(32位二进制数)加1;
(4)转为10位十进制数。
(5)换符号(乘以 -1 )
本质:负数补码的十进制表示。
例子:
0x8004 0208 => (1000 0000 0000 0100 0000 0010 0000 1000) //原码
=> (1111 1111 1111 1011 1111 1101 1111 0111) //取反后得到
=> (1111 1111 1111 1011 1111 1101 1111 1000) //加1后得到
=> (-2,147,220,984) //转为十进制后得到
求取 -1 的二进制补码:
[-1]10进制 = [10000001]原码 = [11111110]反码 = [11111111]补码
注:反码的符号位与原码一致。
将 10 位十进制值转换为 8 位十六进制值
(1)10 位十进制值,乘以 -1,以换符号;
(2)转为二进制数(须为32位);
(3)减1;
(4)每位取反;
(5)转为十六进制;
本质:负数未取补码的逆过程,所得负数转为十六进制。
例子:
-2,147,220,984 => ( 2,147,220,984) //乘以-1 后得到
=> (0111 1111 1111 1011 1111 1101 1111 1000) //转为二进制后得到
=> (0111 1111 1111 1011 1111 1101 1111 0111) //减1后得到
=> (1000 0000 0000 0100 0000 0010 0000 1000) //取反后得到
=> (8004 0208) //转为十六进制后得到
将 10 位十进制值转换为三位枚举值
如果您从 Geometry(esriGeometry 和 esriSpatialReference)或 Geodatabase (esriDataConverter) 库中获得了 10 位错误,请执行以下步骤从您的 10 位错误值中获取三位值:
(1)将 10 位十进制值转换为 8 位十六进制值(按上述步骤进行);
(2)取最后三位数,作为十六进制数,然后转为十进制数;
-2,147,220,984 => (8004 0208) 十六进制
=> 0x208 转为 十进制,得到 520