青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

高性能服務器開發;C++深探

c中調用perl的測試小程序,各種場景繼續測試中

tar包位置:http://m.shnenglu.com/Files/changup/c_perl.tar

本次測試比較完整的一個c文件,貼出來,請高人指點完善,爭取大家實際中能用好,畢竟感覺在程序中嵌入解釋性的腳本是非常好的,尤其針對復雜多變的業務邏輯部分;

 

#include <stdio.h>
#include 
<string.h>
#include 
<stdlib.h>
#include 
<EXTERN.h>
#include 
<perl.h>

static PerlInterpreter* my_perl;

#define CALLFUN_BEGIN  dSP; \
          ENTER; \
          SAVETMPS; \
          PUSHMARK(SP);
#define CALLFUN_END  FREETMPS;\
          LEAVE;
           


void initperlenv(int argc, char* argv[])
{
    my_perl 
= perl_alloc();
    perl_construct(my_perl);    
    perl_parse(my_perl, NULL, argc, argv, (
char **)NULL);
}

void destroyperlenv()
{
      perl_destruct(my_perl);
      perl_free(my_perl);    
}

/* 普通perl標量的操作
*/
void SV_test()
{
    
//創建
    SV* sv_i = newSViv(99);
    SV
* sv_n = newSVnv(23.45);
    SV
* sv_p = newSVpv("test string",0);
    
    SV
* funstring = 0;
    
    
//將變量設置為mortal;
    sv_2mortal(sv_i);
    sv_2mortal(sv_n);
    sv_2mortal(sv_p);    
    
    
//探測類型
    if(SvIOK(sv_i))
    {
        printf(
"sv_i is a int type,value=%d\n"*(int*)(sv_i->sv_any));
    }
    
else
    {
        printf(
"sv_i is not a int type\n");
    }
    
if(SvNOK(sv_n))
    {
        printf(
"sv_n is a double type\n");
    }
    
else
    {
        printf(
"sv_n is not a double type\n");
    }
    
if(SvPOK(sv_p))
    {
        printf(
"sv_p is a string type\n");
    }
    
else
    {
        printf(
"sv_p is not a string type\n");
    }
    
    
//探測類型,這次打印出的是類型的宏定義
    printf("sv_i.type=%u\n", SvTYPE(sv_i));
    printf(
"sv_n.type=%u\n", SvTYPE(sv_n));
    printf(
"sv_p.type=%u\n", SvTYPE(sv_p));
    
    
//以優美的格式打印標量
    sv_dump(sv_i);
    sv_dump(sv_n);
    sv_dump(sv_p);
    
    
//修改值
    sv_setiv(sv_i,89);
    sv_dump(sv_i);
    sv_setnv(sv_n,
89.76);
    sv_dump(sv_n);
    sv_setpv(sv_p,
"String changed");
    sv_dump(sv_p);
    
    
//操作pl腳本中的文件
    funstring = perl_get_sv("main::getstring",1); //沒有得到值
    sv_dump(funstring);
}

/* 操作perl函數
sub fun1()
{
    $username = shift;
    $arg = shift;
    print "your name=$username,your arg=$arg\n";
    return 88;
}
*/
int call_fun()
{
    
//調用函數前的perl堆棧操作
    CALLFUN_BEGIN;
    
    
//參數入棧
    XPUSHs(sv_2mortal(newSVpv("changym",0)));
    XPUSHs(sv_2mortal(newSViv(
32)));
    PUTBACK; 
//表示參數完了
    
    
//調用函數
    perl_call_pv("fun1",G_SCALAR); //G_SCALAR---返回標量;G_ARRAY--返回數組
    /*
    #define G_SCALAR        0
    #define G_ARRAY         1
    #define G_VOID          128     /* skip this bit when adding flags below 
*/
    
    
//extra flags for Perl_call_* routines
    
//#define G_DISCARD       2       /* Call FREETMPS. */
    
//#define G_EVAL          4       /* Assume eval {} around subroutine call. */
    
//#define G_NOARGS        8       /* Don't construct a @_ array. */
    
//#define G_KEEPERR      16       /* Append errors to $@, don't overwrite it */
    
//#define G_NODEBUG      32       /* Disable debugging at toplevel.  */
    
//#define G_METHOD       64       /* Calling method. */
    
    
//開始操作返回值了
    SPAGAIN;
    printf(
"inner ibm.pl,fun1 return %s\n",POPp); //POPi---int, POPp--pchar
    PUTBACK; //表示返回值取完了
    
    
//perl棧資源回收
    CALLFUN_END;
    
return 0;
}

/* 操作perl函數,perl 函數返回一個數組
sub return_array()
{
    @arr = ("changym","chenjx","changjr","xiaobaobao");
    print "inner ibm.pl.return_array:@arr\n";
}
*/
int call_fun_ret_array()
{
    
int ireturn = 0;
    STRLEN n_a; 
//詭異的現象,非要定義這個否則打印值的哪行就報錯
                
//ibm.c:162: `n_a' undeclared (first use in this function)
                
//同樣的問題就是PerlInterpreter的名字必須叫my_perl,為什么???
    
//調用函數前的perl堆棧操作
    CALLFUN_BEGIN;    
    PUTBACK; 
//表示參數完了
    
    
//調用函數
    ireturn = perl_call_pv("return_array",G_ARRAY); //G_SCALAR---返回標量;G_ARRAY--返回數組
    
//開始操作返回值了
    SPAGAIN;
    
if(ireturn>0)
    {
        
while(ireturn>0)
        {
            
//返回的順序是數組的倒敘?。?/span>
            printf("coming from ibm.pl.return_array:%d-%s\n",ireturn--,POPpx);
        }
    }
    
    PUTBACK; 
//表示返回值取完了    
    
//perl棧資源回收
    CALLFUN_END;
    
return 0;
}


int main(int argc, char* argv[])
{
    
char* my_argv[] = {"","ibm.pl"};
    printf(
"begin c_perl_ibm_test\n");
    printf(
"init perl env\n");
    
    initperlenv(
2,my_argv);
    
    
//標量操作測試
    
//SV_test();
    
    
//函數操作測試
    
//call_fun();
    
    
//操作perl函數返回數組測試
    call_fun_ret_array();    
    
    destroyperlenv();    
    printf(
"leaved c_perl_ibm_test\n");
    
return 0;
}

 

posted on 2010-12-30 18:14 changup 閱讀(2197) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式實踐 、隨想

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国内欧美| 亚洲国产精品欧美一二99| 国产精品久久久久久久久久久久 | 免费日韩成人| 国产精品免费观看视频| 亚洲美女淫视频| 欧美成人一区在线| 久久久久久亚洲精品不卡4k岛国| 国产精品久久综合| 一区二区三区 在线观看视频| 欧美激情亚洲综合一区| 久久九九热re6这里有精品| 国产欧美日韩精品在线| 欧美一区二区三区精品电影| 在线亚洲免费视频| 国产精品国产三级国产普通话99| 亚洲小说欧美另类婷婷| 亚洲视屏一区| 国产伦精品一区二区三区免费 | 欧美亚洲自偷自偷| 亚洲主播在线播放| 国产一区二区三区不卡在线观看| 久久精品视频免费观看| 久久久蜜桃精品| 亚洲三级色网| 一区二区三区免费观看| 国产欧美亚洲日本| 免费永久网站黄欧美| 欧美成人亚洲成人| 亚洲一区二区精品在线观看| 亚洲在线视频一区| 国产亚洲成人一区| 蜜臀av国产精品久久久久| 蜜桃伊人久久| 在线视频你懂得一区| 亚洲一二三级电影| 狠狠色噜噜狠狠狠狠色吗综合| 免费成人高清视频| 欧美日韩亚洲一区二区三区在线观看| 亚洲午夜精品久久久久久浪潮 | 欧美一区日本一区韩国一区| 亚洲国产精品日韩| 亚洲最新中文字幕| 国产欧美日韩精品专区| 欧美sm视频| 欧美三级在线播放| 另类酷文…触手系列精品集v1小说| 麻豆91精品91久久久的内涵| 中文精品视频一区二区在线观看| 亚洲伊人一本大道中文字幕| 在线观看三级视频欧美| 亚洲老板91色精品久久| 国产一区二区三区成人欧美日韩在线观看| 欧美黄色一区二区| 亚洲欧美在线一区二区| 久久精品综合一区| 在线一区观看| 久久精品国产欧美激情| 一区二区三区黄色| 亚洲一区欧美激情| 亚洲电影av在线| 亚洲一区二区四区| 亚洲精品欧洲| 久久久精品五月天| 亚洲一区二区在线看| 久久综合中文字幕| 久久久久国产一区二区| 欧美日韩免费观看一区=区三区| 久久久久一区二区| 国产精品成人一区| 亚洲精品一二三| 一区视频在线看| 午夜精品久久久久久久| 亚洲深夜av| 欧美成人精品在线| 久久综合网hezyo| 国产精品无码永久免费888| 亚洲精品美女在线观看播放| 尤物在线观看一区| 羞羞色国产精品| 性欧美1819sex性高清| 欧美日韩国产免费观看| 亚洲国产小视频| 91久久在线观看| 另类国产ts人妖高潮视频| 久久久午夜电影| 国产一区二区三区久久 | 欧美大片在线观看一区| 女同一区二区| 国产真实久久| 欧美在线观看一区| 欧美一区日本一区韩国一区| 欧美性感一类影片在线播放| 亚洲乱码国产乱码精品精| 在线观看国产日韩| 久久精品综合网| 久久久久国产免费免费| 激情综合网址| 卡通动漫国产精品| 欧美激情精品久久久| 亚洲综合色视频| 亚洲黄色在线观看| 久久精品欧美日韩精品| 久久午夜电影网| 亚洲国产婷婷香蕉久久久久久| 美女久久网站| 亚洲欧洲在线一区| 中日韩高清电影网| 国产精品视频免费在线观看| 西西裸体人体做爰大胆久久久| 久久精品99无色码中文字幕| 韩国精品一区二区三区| 久久一区视频| 99精品国产一区二区青青牛奶 | 亚洲精品女av网站| 亚洲电影av在线| 欧美日韩高清在线观看| 亚洲一区二区三区视频| 久久伊人亚洲| 日韩视频一区二区| 国产精品久久激情| 久久精品一级爱片| 亚洲蜜桃精久久久久久久| 久久精品国产99精品国产亚洲性色 | 欧美一区二区成人| 老司机久久99久久精品播放免费 | 一区二区三区亚洲| 欧美日韩免费一区二区三区视频 | 一区二区三区成人| 久久国产精品亚洲va麻豆| 亚洲福利视频一区二区| 欧美日本不卡视频| 久久国产精品72免费观看| 亚洲成色999久久网站| 亚洲一区二区三区成人在线视频精品| 国产农村妇女毛片精品久久麻豆 | 亚洲精品麻豆| 久久久91精品| 一本色道88久久加勒比精品| 国产精品一区久久久| 欧美成人伊人久久综合网| 亚洲一区二区三区激情| 欧美激情影院| 久久久久久电影| 亚洲自拍偷拍福利| 亚洲国产精品尤物yw在线观看| 国产精品少妇自拍| 欧美日本国产精品| 亚洲欧美视频在线观看视频| 红桃av永久久久| 国产伦精品一区二区三区免费迷| 欧美剧在线观看| 久久影院午夜论| 午夜精品短视频| 亚洲视频在线观看一区| 亚洲精品视频在线观看免费| 亚洲人成免费| 免费h精品视频在线播放| 欧美一级视频免费在线观看| 99国产欧美久久久精品| 亚洲国产精品成人| 韩国福利一区| 国产一区二区三区观看| 国产午夜精品美女视频明星a级| 欧美日韩一区在线播放| 欧美韩日高清| 欧美成人精品一区| 欧美 日韩 国产在线| 久久色在线观看| 久久电影一区| 久久不射网站| 欧美尤物巨大精品爽| 亚洲一区二区三区在线播放| 中国成人在线视频| 亚洲午夜视频| 午夜精品久久久久久99热| 亚洲综合欧美| 亚洲影院色无极综合| 中文日韩在线| 午夜国产不卡在线观看视频| 亚洲在线观看免费| 午夜精品婷婷| 久久国产精品99久久久久久老狼| 欧美一区二区三区免费观看| 欧美在线你懂的| 久久久99久久精品女同性| 久久综合九色99| 欧美成人69av| 欧美激情国产精品| 欧美无乱码久久久免费午夜一区 | 亚洲欧美成人在线| 亚洲午夜性刺激影院| 亚洲欧美国产另类| 欧美在线播放| 老司机免费视频一区二区| 欧美激情va永久在线播放| 亚洲激情电影中文字幕| 亚洲欧洲另类国产综合| 一本色道久久88精品综合| 亚洲欧美综合网|