我正在使用Tamas Szekeres构建的GDAL,包括C#绑定,在使用C#和.net 4.0的桌面GIS应用程序中。
我将整个GDAL分发包含在可执行文件的子目录中,并具有以下文件夹结构:
我们正在使用EPSG:4326,该软件是使用32位目标构建的,因为GDAL C# API使用p/invoke到32位库(可以尝试64位,因为Tamas提供了这些,但还没有找到时间去做)。
当我运行我的应用程序时,我会得到以下错误。
使用任何按钮关闭对话框后,软件将按设计继续执行。
该错误发生在第一次调用以下方法时。
我将整个GDAL分发包含在可执行文件的子目录中,并具有以下文件夹结构:
\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj
我们正在使用EPSG:4326,该软件是使用32位目标构建的,因为GDAL C# API使用p/invoke到32位库(可以尝试64位,因为Tamas提供了这些,但还没有找到时间去做)。
当我运行我的应用程序时,我会得到以下错误。
使用任何按钮关闭对话框后,软件将按设计继续执行。
该错误发生在第一次调用以下方法时。
OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);
奇怪的问题:
- 这个错误只在一台电脑上出现(至少目前是这样)
- 我在其他几台32位和64位计算机上运行了此软件,没有出现问题
- 编译GDAL代理库后,第一次运行时不会出现错误,但在每次后续运行时都会出现错误
- 无论是发布版还是调试版,都会发生错误
- 无论是否附加调试器,都会发生错误
- 无论是否打开Gdal.UseExceptions或Osr.UseExceptions(),都会发生错误
- 禁用可移动驱动器可以使错误消失。但我认为这不是真正的解决方案,因为我无法要求客户这样做。
我尝试了以下方法:
- 捕捉错误
- 更改GDAL目录和环境设置
- 更换电脑和操作系统:这个方法有效
- 使用SysInternals ProcMon跟踪打开的文件,但没有成功,它们似乎都是存在的文件
- 硬盘失败时,我重新构建了相关计算机,但没有成功。
- 使用CCleaner“清理”注册表
- 在执行时,GDAL目录中的文件未发生变化
假设
- 错误发生在非托管代码中
- 在GDAL初始化期间,某个路径指向了计算机上不再连接的驱动器
- 我还假设这仅限于计算机配置错误
配置
- Windows 7 Pro(专业版)
- Intel Core i7 920 @ 2,67GHz
- 12.0 GB RAM(内存)
- 64-bit OS(操作系统)
- Drive C: 120 GB SSD with OS, development (Visual Studio 10), etc(包含操作系统、开发工具等的 120GB 固态硬盘)
- Drive D: 1 TB WD 10,000k with data, not being accessed for data.(不包含数据的 1TB 机械硬盘)
问题
我需要一个指引来捕获这个错误,或者一个工具或技术来帮助我找出是什么导致了这个错误。我不想发布软件而存在某些系统会出现这种行为的可能性。