From: David P. <dpi...@me...> - 2012-11-13 18:29:08
|
Well for one thing, SWIG doesn't build interfaces from Ruby to Matlab. It only builds interfaces for C/C++ libraries to other languages. You don't say how you attempted to include tmwtypes.h in the SWIG file, at least not in terms that are meaningful to SWIG users in general. Depending on what tmwtypes.h contains, an %import statement might work, or simply copy the relevant typedefs to the SWIG interface file. (Btw, I can't personally help you with SWIG for Matlab or Ruby specifically since I do not use Matlab or Ruby with SWIG.) From: Morri Feldman [mailto:mor...@we...] Sent: Saturday, November 10, 2012 6:28 AM To: swi...@li... Subject: [Swig-user] Seeking very basic advice on SWIG usage Hello, Please forgive me if this very basic question is not appropriate. I have zero experience in C-programming. For reference, I'm using OSX Mountain Lion with Xcode 4.5.2. If I read the makefile correctly, it is using gcc-4.2. 'gcc-4.2 --version' gives 'i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1' I'm trying to update a project called matlab-ruby which uses SWIG to build an interface from ruby to matlab. The matlab C-API has changed and now I get the following error at runtime. `mxCreateDoubleMatrix_730': Expected argument 0 of type mwSize, but got Fixnum 20 (TypeError) Fixnum is the ruby type for an integer. Based on grepping the matlab header files I think mwSize is some type of integer: tmwtypes.h:typedef int mwSize; tmwtypes.h:typedef size_t mwSize; /* unsigned pointer-width integer */ The header tmwtypes.h is not currently listed as an include in the SWIG interface file instead. If I add tmwtypes.h to the include section, I still get the TypeError. If I add tmwtypes.h to both the include and the parse section, I get the following compile error: Error: CPP #error ""This code must be compiled using a 2's complement representation for signed integer values"". Use the -cpperraswarn option to continue swig processing. Giving up on tmwtypes.h, my solution is to add the following to the SWIG interface file. %typemap(in) mwSize { $1 = NUM2INT($input); } You can look at the complete SWIG interface file at: https://github.com/morrifeldman/matlab-ruby/blob/master/ext/matlab_api/matlab_api.i After adding this typemap, the program compiles and seems to work perfectly. I'd like to know if this is the correct solution to the TypeError I am having with mwSize. Should I try something else instead? I'd appreciate it if someone could check my work before I submit a pull request to incorporate these changes upstream. Thank you for your help, Morri Feldman |