From: Jeff Sack Date: 2007-01-12T07:20:06+09:00 Subject: SWIG, Ruby, C and typemaps Hello all. I am seeking some advice on using SWIG to wrap some native C code provided to me (I don't have the ability to change it). Basically, I have something like this: The definition of one of the problematic methods I am trying to wrap looks something like this. This is in my SWIG interface file (.i file): int open_file(ResponseObject **resp, const char *fname); And the normal way of using this is as follows: ResponseObject *reponsObj; const char *filename="input_file"; if(open_file(&reponsObj, filename)!=0) { // handle non-zero error code } else { // success! } I think the most natural way of accessing this method might be something like this: resp = open_file('input_file') In this scenario, resp is a Ruby object representing ResponseObject, and the original int return value is now mapped to a conditionally thrown exception. If open_file returns 0, then no exception would be thrown, otherwise, the Ruby method open_file would throw an exception which wraps the int return code. Thoughts? I know there is some SWIG/typemap magic that can do this, but so far I'm a bit stumped. Can someone offer some advice? I can provide more details if needed. Thanks so much in advance for your help. Much appreciated. -Jeff