[Gdal-dev] GDAL C# bindings exception: Attempted to read or write protected memory

Tamas Szekeres szekerest at gmail.com
Mon Apr 23 06:29:27 EDT 2007


Ben,

I would suggest to start with the latest SVN trunk. There were some
fundamental changes compared with the current stable branch. It might
be more difficult to make this transition later. For more information
see:

http://trac.osgeo.org/gdal/wiki/GdalOgrCsharpVersions
http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

Best regards,

Tamas



2007/4/23, Ben Greene <bgreene at rapidmap.com.au>:
> Hi,
>
> I had a problem with the GDAL C# bindings freezing a little while ago, and Tamas managed to find the problem (I was passing in a two-element array instead of a three element for the return value).  However, now I'm having a different issue.
>
> I'm working with 1.4.1 binaries compiled myself according to the instructions on this site (I can't find the most recent binaries in the FWTools distribution).  When I run the code below, I get a System.AccessViolationException:Attempted to read or write protected memory exception on the line:
> transform.TransformPoint(point, px, py, 0.0)
>
> It appears that the exception is thrown from this line:
> public void TransformPoint(double[] argout, double x, double y, double z) {
>
> osrPINVOKE.CoordinateTransformation_TransformPoint__SWIG_1(swigCPtr, argout, x, y, z);
>
> }
>
> The test image I'm using is:
>
> o41078a5.tif
> from
> http://dl.maptools.org/dl/geotiff/samples/usgs/
>
> Here is the VB.Net code I'm using (in VS 2005):
>
> Imports GDAL
>
> Imports OGR
>
> Public Class GeoTiffReader
>
> Private Shared image As Dataset
>
> Public Shared Function GetGeoReference(ByVal Filename As String) As GeoReference
>
> If Not (Filename Is Nothing) Then
>
> 'Return Nothing
>
> 'if uncommented, the code will not crash
>
> End If
>
> GDAL.gdal.AllRegister()
>
> image = GDAL.gdal.Open(Filename, 0)
>
> If (image Is Nothing) Then
>
> Return Nothing
>
> End If
>
> Dim gr(6) As Double
>
> image.GetGeoTransform(gr)
>
> Dim topLeft() As Double = TransformWGS84(gr(0), gr(3))
>
> Dim bottomRight() As Double = TransformWGS84(gr(0) + gr(1) * image.RasterXSize, gr(3) + gr(5) * image.RasterXSize)
>
> If (topLeft.Length = 2 And bottomRight.Length = 2) Then
>
> Return New GeoReference(topLeft(0), topLeft(1), bottomRight(0), bottomRight(1))
>
> Else
>
> Return Nothing
>
> End If
>
> image.Dispose()
>
> End Function
>
> Public Shared Function TransformWGS84(ByVal px As Double, ByVal py As Double) As Double()
>
> Dim point() As Double
>
> point = New Double() {0.0, 0.0, 0.0}
>
> Dim srWGS84 As New SpatialReference("")
>
> srWGS84.SetWellKnownGeogCS("WGS84")
>
> If (image.GetProjection() = "") Then
>
> Return New Double() {}
>
> End If
>
> Dim srCurrent As New SpatialReference(image.GetProjection())
>
> Dim transform As New CoordinateTransformation(srCurrent, srWGS84)
>
> If (transform Is Nothing) Then
>
> Return New Double() {}
>
> End If
>
> Try
>
> transform.TransformPoint(point, px, py, 0.0)
>
> Catch
>
> Return New Double() {}
>
> End Try
>
> Return point
>
> End Function
>
> End Class
>
>
> _______________________________________________
> Gdal-dev mailing list
> Gdal-dev at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/gdal-dev
>



More information about the Gdal-dev mailing list