From: <ma...@go...> - 2006-09-06 01:05:31
|
Hello Lyte, Yes this is 'correct' behaviour. A function void do_things(char* xxx); is wrappered assuming that xxx is a string, while void do_things(unsigned char* xxx); is wrappered assuming that its a pointer (userdata). The same rules applies when its an array inside a structure in your case. I seem to recall that all SWIG bindings work like this. If you want to change that for your project, thats quite easy. Just add: %typemap(in) unsigned char*=char*; %typemap(out) unsigned char*=char*; in your .i file before you %include your headers. This copies the typemaps for you. If you don't want it to work for all unsigned char's, but only your TAscii, I suppose that you could use: %typemap(in) TAscii*=char*; %typemap(out) TAscii*=char*; Regards, Mark > Hello list! > > I have a struct looking something like this > > typedef struct { > TAscii Digits[20]; > } TNumber; > > where TAscii is typedefed as > > typedef unsigned char TAscii; > > When I wrap this for Lua SWIG generates set and get method as expected, > although SWIG do not think that Digits is a string (which it is). In the set > > method, theres a line reading > > if(!lua_isptrtype(L,2)) SWIG_fail_arg(2); > > which means that SWIG wants a userdata. > > If I change the typedef to > > typedef char TAscii; > > it works and the generated set method has the line > > if(!lua_isstring(L,2)) SWIG_fail_arg(2); > > which is what i want. > Is this a bug in SWIG or is it normal behaviour? I tried to make a typemap > aswell, but typemaps does not seem to apply on these autagenerated methods. > > Thanks! > > - Lyte |