From: Zhan X. <zh...@gm...> - 2008-03-11 14:14:49
|
I simplified my problem as the following. I typedef uint64_t as handle. In testfunction, I would like to use handle as an output parameter. I read the manual and decide that I need to use typemap. The code can wrap and compile. However, in my perl script, it gave me TypeError message. If I use uint64_t (' %apply uint64_t* OUTPUT { uint64_t *x }; ' ) directly, it works fine. The details are in the following snap of my code. Many thanks in advance! /* file test05.h */ #include <iostream> #include <stdint.h> #include <stdlib.h> typedef uint32_t result_t; typedef uint64_t handle; result_t testfunction( handle *x); /* end of test05.h */ /* file test05.i */ %module "test05" %{ #include "test05.h" %} %include stdint.i %include std_string.i %include typemaps.i typedef uint32_t result_t; typedef uint64_t handle; %typemap(in) handle *INPUT($*1_ltype temp), handle &INPUT($*1_ltype temp) { temp = strtoull(SvPV($input,PL_na), 0, 0); $1 = &temp; } %typemap(argout) handle *OUTPUT, handle &OUTPUT { char temp[256]; if (argvi >= items) { EXTEND(sp,1); } sprintf(temp,"%llu", (handle)*($1)); $result = sv_newmortal(); sv_setpv($result,temp); argvi++; } %apply handle* OUTPUT { handle *x }; result_t testfunction( handle *x); /* end of test05.i */ /* file test05.pl with error messages */ use test05; # ($a, $b) = test05::testfunction(); # Error! RuntimeError Usage: testfunction(x); #$a = test05::testxz($b); # Error! TypeError in method 'testfunction', argument 1 of type 'handle *' /* end of file test05.pl */ |