From: Zhan X. <zh...@gm...> - 2008-02-18 08:10:40
|
On 2/18/08, Nitro <ni...@dr...> wrote: > Am 17.02.2008, 22:06 Uhr, schrieb Zhan Xu <zh...@gm...>: > > > I'm a newbie of swig and perl. I am trying to make the following > > simple test code work > > > > /* example.h */ > > namespace mytest { > > typedef uint32_t result_t; > > extern result_t test01(); > > } > > /* end of exmaple.h */ > > > > /* example.cpp */ > > #include "example.h" > > namespace mytest { > > extern result_t test01() { > > result_t r = 33; > > return r; > > } > > } > > /* end of example.cpp */ > > > > /* example.i */ > > %module "mytest" > > %{ > > #include "example.h" > > }% > > > > %include "example.h" > > /* end of example.i */ > > > > I can successfully compile to get the perl module. When I run the > > following perl program > > > > # runme.pl > > use mytest; > > $a = mytest::test01(); > > print $a, "\n"; > > #end of runme.pl > > > > It gave me weired result -- _p_uint32_t=SCALAR(0x8152d48) instead of > > the number(33) I expected. Please note that if I omit the typedef and > > change the return value of test01 function to 'int', the program runs > > ok. > > uint32_t is not a builtin-type. You need to use %include stdint.h . See > also http://en.wikipedia.org/wiki/Stdint.h . There's a link to a Visual > Studio header in case you're using the Visual Studio compiler and not > something like gcc. > > -Matthias > Matthias: Thanks a lot for the reply. Actually, I have already #include <stdint.h> in the example.h file but forget to metion it in my question. Since I use %include "example.h" in the example.i file, do I need to explicitly state %include stdint.h? Anyway, I tried to use %include stdint.h in the example.i but swig complains that /usr/include/stdint.h:44: Error Syntax error in input(1). Sounds like that swig tries to parse the stdint.h file without success... I feel that there might be something wrong with the perl script (runme.pl). I guess that $a=mytest::test01() will return a pointer, which wrap around the type uint32_t. That's why it gives the weired output result _p_uint32_t=SCALAR(0x8152d48). But I'm not sure about it and do not know how to handle that using perl. Zhan |