亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2649 | 回復(fù): 7
打印 上一主題 下一主題

用過h2xs的朋友指教一下好嗎 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2007-05-24 20:33 |只看該作者 |倒序?yàn)g覽
想為一個(gè)C庫函數(shù)寫個(gè)Perl接口,試了很久都不會(huì)用,perlxstut等文章看了一遍又一遍,學(xué)多問題還是找不到答案。

例如,size_t在typemap中有定義,但是為什么不能識(shí)別?

$ h2xs -x -O -n eSpeak espeak.h
...
Writing eSpeak/ppport.h
Scanning typemaps...
Scanning /usr/share/perl/5.8/ExtUtils/typemap
Scanning espeak.h for functions...
Expecting parenth after identifier in `size_t size'
after `size_t ' at /usr/local/share/perl/5.8.8/C/Scan.pm line 797.

涉及size_t的那段代碼如下:
espeak_ERROR espeak_Synth(const void *text,
        size_t size,
        unsigned int position,
        espeak_POSITION_TYPE position_type,
        unsigned int end_position,
        unsigned int flags,
        unsigned int* unique_identifier,
        void* user_data);

這些不解的問題還有很多,有沒有更好的介紹如何做C語言binding的資料呢?不勝感激!

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報(bào)告]
發(fā)表于 2007-05-24 23:57 |只看該作者
上 maillist 吧。會(huì)這個(gè)的人不多。我只會(huì)一點(diǎn)點(diǎn),勉強(qiáng)能解決自己的問題而已。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2007-05-25 09:10 |只看該作者
h2xs這玩意不好用,改用Inline::C吧,非常簡單。


  1. package MyWrapper;
  2. use Inline => Config => LIBS => '-L/usr/local/mylib -lmylib';
  3. use Inline => Config => INC  => '-I/usr/local/mylib';
  4. use Inline C;
  5. sub version {
  6.    return "MyWrapper 2.0";
  7. }
  8. __DATA__
  9. __C__
  10. #include "mylib.h"
  11.    
  12. SV* new() {
  13.     void * session = newsession();
  14.     SV*    obj_ref = newSViv(0);
  15.     SV*    obj = newSVrv(obj_ref, class);
  16.     sv_setiv(obj, (IV)session);
  17.     SvREADONLY_on(obj);
  18.     return obj_ref;
  19. }
  20.    
  21. void set (SV* obj, char *attribute, char *value) {
  22.     setattribute ( ((void*)SvIV(SvRV(obj))), attribute, value);
  23. }
  24.    
  25. char* get (SV* obj) {
  26.     return getresult ( ((void *)SvIV(SvRV(obj))) );
  27. }
  28.    
  29. void DESTROY(SV* obj) {
  30.     return freesession ( ((void *)SvIV(SvRV(obj))) );
  31. }
復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2007-05-28 15:44 |只看該作者
謝謝樓上兩位大俠! 福瑞哈哥 好像很熟的樣子,我之前也試過Inline::C,但我想寫完后發(fā)布,我感覺h2xs好像比較適合和標(biāo)準(zhǔn)。我見到SvRV這些東西就頭痛。我想請(qǐng)問以下兩種類型怎樣轉(zhuǎn)換:

typedef enum {
  A,
  B
} MYENUM;

typedef struct {
  char *a;
  union {
    int b;
    float c;
  } num;
} my_struct;

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2007-05-28 16:39 |只看該作者
原帖由 hgneng 于 2007-5-28 15:44 發(fā)表
謝謝樓上兩位大俠! 福瑞哈哥 好像很熟的樣子,我之前也試過Inline::C,但我想寫完后發(fā)布,我感覺h2xs好像比較適合和標(biāo)準(zhǔn)。我見到SvRV這些東西就頭痛。我想請(qǐng)問以下兩種類型怎樣轉(zhuǎn)換:

typedef enum {
  A,
...


可惜我對(duì)XS並不熟悉,而且也不想搞它了。h2xs其實(shí)並不更適合和標(biāo)準(zhǔn),它只更早出現(xiàn)而已,今後Inline::C將成為標(biāo)準(zhǔn)方法,Perl6也依賴於它。個(gè)人感覺Inline::C很簡單。唯一的缺陷是用戶需要Inline::C模組。或者開發(fā)者用InlineX::XS自動(dòng)生成XS再發(fā)布,不過我沒用過。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2007-05-28 16:55 |只看該作者
好的,謝謝指教!我再認(rèn)真看看文檔

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2007-05-28 16:56 |只看該作者
自己修改makemaker參數(shù)能解決很多問題.

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
8 [報(bào)告]
發(fā)表于 2007-05-30 21:25 |只看該作者
原帖由 福瑞哈哥 于 2007-5-25 09:10 發(fā)表
h2xs這玩意不好用,改用Inline::C吧,非常簡單。

我總覺得 Inline::C 不如 XSUB 好用。
XSUB 可以少寫很多代碼。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP