mapping betwing a standard type and a user defined type with SWIG

L

Lyes Amazouz

[Note: parts of this message were removed to make it a legal post.]

Hello!

I've wrote a C library where I redefined (with typedef) the "char" and I
gave it the name "my_char". Every things worked well when I gave constant
strings to my wrapped functions which takes a "my_char *" as argument (then
it is equivalent to give a char * argument). But when I have given a String
variable to one of my functions (I initialised a variable var = "" and gave
it to the finction), it returned me this:

Expected argument 3 of type my_char *, but got String "" (TypeError)

How can I do to tell SWIG that the "my_char" type is euivalent to the "char"
type? May I have a solution to make work my functions

thank you
 
A

Alex Fenton

Lyes said:
I've wrote a C library where I redefined (with typedef) the "char" and I
gave it the name "my_char". Every things worked well when I gave constant
strings to my wrapped functions which takes a "my_char *" as argument (then
it is equivalent to give a char * argument). But when I have given a String
variable to one of my functions (I initialised a variable var = "" and gave
it to the finction), it returned me this:

Expected argument 3 of type my_char *, but got String "" (TypeError)

How can I do to tell SWIG that the "my_char" type is euivalent to the "char"
type? May I have a solution to make work my functions

You are passing a C function that expects a 'my_char*' a Ruby string,
which in C has the type VALUE.

You need to apply a typemap that tells SWIG how to translate a ruby
object into my_char*. Something roughly like:

%typemap(in) my_char* "$1 = (my_char*)STR2CSTR($input);"

This is the most basic conversion; a good typemap would probably also
verify the ruby class of the passed-in argument, perhaps using SWIG's
%typemap(check)

Without wishing to be rude, this is fairly basic SWIG stuff. You might
want to have another look at the manual. It is dense but quite
comprehensive. In particular:

http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn37
http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn41

alex
 
L

Lyes Amazouz

[Note: parts of this message were removed to make it a legal post.]

Lyes Amazouz wrote:

I've wrote a C library where I redefined (with typedef) the "char" and I

You are passing a C function that expects a 'my_char*' a Ruby string, which
in C has the type VALUE.

You need to apply a typemap that tells SWIG how to translate a ruby object
into my_char*. Something roughly like:

%typemap(in) my_char* "$1 = (my_char*)STR2CSTR($input);"

This is the most basic conversion; a good typemap would probably also
verify the ruby class of the passed-in argument, perhaps using SWIG's
%typemap(check)

Without wishing to be rude, this is fairly basic SWIG stuff. You might want
to have another look at the manual. It is dense but quite comprehensive. In
particular:

http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn37
http://www.swig.org/Doc1.3/Ruby.html#Ruby_nn41

alex
Hello

Thank you for your help, I will try this.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,754
Messages
2,569,527
Members
44,998
Latest member
MarissaEub

Latest Threads

Top