GDAL1.7.2代码(部分):
- int
VSIWin32FilesystemHandle r::Stat( const char * pszFilename, VSIStatBufL * pStatBuf, int nFlags ) - {
(void) nFlags; - #if
(defined(WIN32) && _MSC_VER >= 1310) || __MSVCRT_VERSION__ >= 0x0601 if( CSLTestBoolean( CPLGetConfigOption( "GDAL_FILENAME_IS_UTF8", "YES" ) ) ) { int nResult; wchar_t *pwszFilename = CPLRecodeToWChar( pszFilename, CPL_ENC_UTF8, CPL_ENC_UCS2 ); nResult = _wstat64( pwszFilename, pStatBuf ); CPLFree( pwszFilename ); return nResult; } else - #endif
{ return( VSI_STAT64( pszFilename, pStatBuf ) ); } - }
- int
VSIWin32FilesystemHandle r::Stat( const char * pszFilename, VSIStatBufL * pStatBuf ) - {
return( VSI_STAT64( pszFilename, pStatBuf ) ); - }
这样的优点是,不用改动GDAL的源代码,但是如果自己的工程中经常打开图像的话,每次都要加,比较麻烦。
分别添加到GDAL
All
Register()函数【GDAL_HOME\frmts\gdalallregister.cpp73行左右】和OGRRegister
All
()函数【GDAL_HOME\ogr\ogrsf_frmts\generic\ogrregisterall.cpp38行左右】中,然后重新编译GDAL即可。这样的方式就和使用以前版本的GDAL一样了,不用改动自己的代码,推荐使用这种方式。
3:修改GDAL源代码,
GDAL_HOME\port\cpl_vsil_win32.cpp文件中的全部去掉
CPLGetConfigOption全部去掉,或者将后面的YES改为NO
,但是该工作量巨大,而且有好多地方,这种方式不推荐。