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

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

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

tar包位置:http://www.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>
            午夜精品久久久久久久久久久| 亚洲高清视频一区二区| 一区二区久久久久久| 欧美激情亚洲激情| 欧美激情中文字幕一区二区| 一区二区高清视频| 亚洲一区二区三区精品在线观看| 国产欧美韩国高清| 欧美ed2k| 欧美小视频在线观看| 久久精品九九| 蜜桃av噜噜一区| 亚洲午夜极品| 欧美中文日韩| 亚洲乱码日产精品bd| 一本色道久久综合亚洲精品小说 | 欧美亚洲三区| 亚洲国产成人tv| 一区二区三区国产精华| 国产亚洲精品7777| 亚洲激情女人| 国产精品视频1区| 蜜臀a∨国产成人精品| 欧美破处大片在线视频| 久久九九热免费视频| 欧美成人免费小视频| 亚洲欧美日本伦理| 久久久久久夜精品精品免费| 99国产一区| 欧美在线视频日韩| 亚洲一区二区三区乱码aⅴ| 久久精品日韩| 亚洲欧美影院| 亚洲天堂激情| 久久三级福利| 久久久久久一区二区| 欧美日韩视频在线| 欧美不卡在线视频| 国产亚洲综合在线| 一区二区三区精品视频| 亚洲国产欧美一区二区三区丁香婷| 99精品视频免费| 亚洲欧洲在线一区| 久久久av毛片精品| 欧美日韩成人一区二区| 欧美岛国在线观看| 国产一区二区三区免费不卡| av成人免费观看| 亚洲精品欧美极品| 久久久久久一区| 久久免费高清视频| 国产麻豆成人精品| 亚洲一区图片| 亚洲欧美激情一区二区| 欧美日韩国产成人在线免费| 欧美电影电视剧在线观看| 国产三区精品| 欧美与黑人午夜性猛交久久久| 亚洲天堂av综合网| 欧美日韩在线三级| 日韩一级黄色大片| 一本久道久久久| 欧美日韩国内| 亚洲视频999| 亚洲欧美中文在线视频| 国产精品久久久久久亚洲调教| 亚洲日韩欧美一区二区在线| 99re6这里只有精品视频在线观看| 裸体素人女欧美日韩| 欧美激情精品久久久久久免费印度| 韩日欧美一区| 你懂的国产精品| 亚洲国产精品va| 99成人免费视频| 国产精品高清在线观看| 亚洲网址在线| 久久精品午夜| 亚洲韩国青草视频| 欧美日韩不卡视频| 这里只有精品丝袜| 久久精品国产一区二区三区免费看 | 久久中文在线| 亚洲人被黑人高潮完整版| 99国产精品久久久| 国产精品色在线| 久久免费少妇高潮久久精品99| 欧美电影美腿模特1979在线看 | 国产欧美日韩综合一区在线观看| 亚洲欧美国产另类| 免费欧美在线视频| 一本久道综合久久精品| 国产精品入口尤物| 久热综合在线亚洲精品| 亚洲精品视频一区| 久久久久久久精| 亚洲免费观看高清在线观看| 国产精品每日更新| 久久亚洲风情| 亚洲网址在线| 亚洲国产精品传媒在线观看| 午夜免费电影一区在线观看| 在线播放亚洲| 国产精品毛片va一区二区三区| 久久久精品动漫| 洋洋av久久久久久久一区| 久久久久久噜噜噜久久久精品 | 18成人免费观看视频| 欧美色区777第一页| 免费观看30秒视频久久| 一区二区三区四区蜜桃| 国产一区二区三区在线免费观看| 欧美精品一区二区三区视频| 欧美亚洲综合久久| 亚洲最黄网站| 亚洲黄色av一区| 久久久久国产一区二区三区| 亚洲少妇自拍| 亚洲精品美女| 一区二区三区在线免费视频| 国产精品护士白丝一区av| 女人香蕉久久**毛片精品| 亚洲欧美日韩在线不卡| 亚洲精品永久免费精品| 另类图片国产| 欧美在线视频一区| 亚洲一区不卡| 亚洲精品美女久久久久| 黄色小说综合网站| 国产亚洲欧美色| 国产亚洲精品久久久久动| 欧美午夜大胆人体| 免费av成人在线| 久久亚洲精品伦理| 久久动漫亚洲| 欧美一级理论性理论a| 一区二区日韩| 亚洲免费黄色| 99精品国产热久久91蜜凸| 日韩网站免费观看| 日韩亚洲不卡在线| 亚洲第一页在线| 欧美成人四级电影| 欧美激情第10页| 免费短视频成人日韩| 欧美国产大片| 亚洲福利视频一区二区| 欧美激情第10页| 亚洲日本黄色| 国产精品99久久久久久www| 在线视频日韩| 欧美亚洲日本国产| 久久久久国产成人精品亚洲午夜| 久久精品国产99国产精品| 久久精品成人一区二区三区蜜臀| 久久一区国产| 欧美久久久久久久久久| 欧美日韩国产一区精品一区 | 欧美精品国产| 欧美日韩一区二区精品| 国产精品日韩一区二区三区| 国产日韩欧美另类| 在线观看视频一区二区欧美日韩| 亚洲精品在线一区二区| 亚洲愉拍自拍另类高清精品| 久久久精品一区二区三区| 麻豆精品视频在线| 日韩写真在线| 欧美在线亚洲| 欧美刺激性大交免费视频 | 欧美资源在线| 欧美激情二区三区| 国产精品一区二区黑丝| 亚洲国产高清一区| 亚洲丝袜av一区| 免费看av成人| 亚洲一区二区三区高清 | 亚洲精品一区久久久久久| 亚洲一级免费视频| 久久野战av| 国产精品日韩欧美大师| 亚洲国产精品精华液2区45| 亚洲私拍自拍| 欧美激情第8页| 欧美一级午夜免费电影| 欧美精品一区二区三区蜜臀 | 欧美成人a视频| 久久精品91久久香蕉加勒比| 欧美另类高清视频在线| 国产一区二区三区免费在线观看 | 先锋资源久久| 亚洲国产成人午夜在线一区| 亚洲欧美另类综合偷拍| 欧美黑人在线观看| 国产一区视频在线观看免费| 亚洲少妇诱惑| 亚洲精品久久久蜜桃| 久久久人成影片一区二区三区 | 久久九九热re6这里有精品| 欧美日韩在线另类| 亚洲精品欧美专区|