Thanks, I set return type to UV, it works and I can call it back and forth in C:

use strict; use warnings; use Devel::Peek; my $dd = "hello world\n"; Dump $dd; my $ee = cc($dd); printf("the dd string address is %x \n", cc($dd)); dd($ee); use Inline Config => BUILD_NOISY => 1, CLEAN_AFTER_BUILD => 0; use Inline 'C' => <<'CODE'; int dd(UV x){ printf("string is %s \n", (char*)x); return 0; } UV cc(SV* a){ return SvPVX(a); } CODE ###############output########### andy@andyhome:~/one-off$ perl abe.pl SV = PV(0x56386170b050) at 0x56386172f008 REFCNT = 1 FLAGS = (POK,IsCOW,pPOK) PV = 0x5638617addf0 "hello world\n"\0 CUR = 12 LEN = 14 COW_REFCNT = 1 the dd string address is 5638617addf0 string is hello world

I pass it back to perl, But I got little confused: in typemap, both unsigned int and UV refer to T_UV and in OUTPUT it does convert to UV:

int T_IV unsigned T_UV unsigned int T_UV UV T_UV T_UV sv_setuv($arg, (UV)$var);
why seems perl neglect typemap file but use config?
Platform: osname=linux osvers=4.15.0-52-generic archname=x86_64-linux uname='linux andyhome 4.15.0-52-generic #56-ubuntu smp tue jun 4 2 +2:49:08 utc 2019 x86_64 x86_64 x86_64 gnulinux ' config_args='-de -Dprefix=/home/andy/perl5/perlbrew/perls/perl-5.3 +0.0 -Aeval:scriptdir=/home/andy/perl5/perlbrew/perls/perl-5.30.0/bin' hint=recommended useposix=true d_sigaction=define useithreads=undef usemultiplicity=undef use64bitint=define use64bitall=define uselongdouble=undef usemymalloc=n default_inc_excludes_dot=define bincompat5005=undef Compiler: cc='cc' ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-str +ong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' optimize='-O2' cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-str +ong -I/usr/local/include' ccversion='' gccversion='7.4.0' gccosandvers='' intsize=4 longsize=8 ptrsize=8 doublesize=8 byteorder=12345678
Please enlighten me.




I am trying to improve my English skills, if you see a mistake please feel free to reply or /msg me a correction


In reply to Re^4: How get PV address? by xiaoyafeng
in thread How get PV address? by xiaoyafeng

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.