[Gdal-dev] Exception class(es) in SWIG C# wrapper

Tamas Szekeres szekerest at gmail.com
Mon Mar 5 17:28:37 EST 2007


2007/3/5, Richard Matsunaga <richard.matsunaga at waypointinfo.com>:
>
> If I remember correctly, many times in GDAL, a (C API) method will return
> null when something could not happen, like opening a dataset.
>
> In these cases, I would like to check for null and throw a GdalException or
> OgrException, which contains the extended error message, up my call stack.
>
> I could retrieve the error information and send that in any exception, like
> an InvalidOperationException, but it's a little cleaner if we can
> encapsulate the message details in new exception type.
>

Here's the typical SWIG generated error handling code that follows a
method invocation.

result = (GDALDatasetShadow *)Open((char const *)arg1,arg2);
    CPLErr eclass = CPLGetLastErrorType();
    if ( eclass == CE_Failure || eclass == CE_Fatal ) {
      {
        SWIG_CSharpException(SWIG_RuntimeError, CPLGetLastErrorMsg());
return 0;
      };
    }

SWIG_CSharpException will create a new ApplicationException that will
include the string returned by CPLGetLastErrorMsg().  The exception is
thrown when the C# function returns.
Apparently this is a similar operation you have described above. In my
understanding the main difference is that you would want to get a
different exception type for the different modules.


Best regards,

Tamas



More information about the Gdal-dev mailing list