花钱的年华

C++分站

 

2005年10月24日

SWIG,把C/C++ API 导出成Java,C#,Python,Ruby,Php的类库

    文艺一点总结,SWIG就是C/C++类库与泛高阶语言的万能粘合剂。
   按照Swig的思路,C/C++是很优秀的library级代码语言,而写界面等方面则是Java、C#、Python们占优。所以SWIG(Simplified Wrapper and Interface Generator) 就把C/C++写的类库,编译为上述高阶语言的Class来使用。
    原本担心这个项目有点边缘化,一看原来Ruby和Python早就靠它从C/C++里溜东西出来了。对于python, ruby这些家底不厚的新生代来说,C/C++的类库很有魅惑力。
    cyt偶像说,"做产品的时候好呀:有丰富的API接口,支持java、python、php、perl、ruby…… 多好吹…… "
   
1. 实现原理:
    比如Java吧,有一个JNI机制可以直接调用C代码,但要求C代码需如是:

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
{
    printf(
"Hello world!\n");
    
return;
}


   SWIG 就为你自动生成了这个冗长的wrapper文件,其中还妥善完成了类型转换,函数指针、模板这些C++功能在其他语言中的转换等诸般工作,善举阿。

 2.操作过程: 
    很简单,特别在VC里dsp文件都写好了,把选项设为Release,rebuild一下就搞定。
    如果要拆成慢动作,在一个Java项目里是这样的:
   1.编写interface文件example.i
     如果api有头文件就更简单了,下面的代码定义一个example类
  

%module example
%{
#include 
"example.h"
%}

%include "example.h"


    2.  swig -java example.i  
     生成符合JNI语法(见上)的C文件: example_wrap.c
     生成Java类文件:exampleJNI.java,example.java

    3.VC把example_wrap.c 和example.c 打包成dll. 

    4.在普通java程序里使用example.java
 

      System.loadLibrary("example");
      
int g = new Example().add(42,105);


  3.总结
    当你山穷水尽,准备要重新发明轮子的时候,总该想起有个swig,可以把C/C++的轮子,换装到你的语言上。

posted @ 2005-10-24 17:41 江南白衣 阅读(3663) | 评论 (2)编辑 收藏

2005年10月14日

Javaer 双修C++的key point

请看BlogJava上的最新版 : Javaer 双修C++的key point

posted @ 2005-10-14 11:28 江南白衣 阅读(582) | 评论 (0)编辑 收藏

2005年10月11日

C++ 完全不完全资源导引--书籍篇

三军未动,资料先行。书山碟海,只列其中最好的。统统都可以emule找到。

1.快速入门
   〈Accelerated.C++〉2000 
   〈Essential C++〉2002 Lipman
     两本都是开篇就讲C++/STL,绝口不提C,而且都有中文版。

2.枕头参考
  〈C++.Primer.4th〉2005 Lippman,第3版有中文版,当入门书看也无不可。
  〈The.C++.Programming.Language.3rd〉Bjarne Stroustrup ,简称TCPL。

3.专门书籍
    STL参考:〈The.C++.Standard.Library-A.Tutorial.And.Reference〉1999
                           号称最好的STL参考,但我觉得很像JDK文档。

    Boost 参考:〈Beyond the C++ Standard Library - An Introduction to Boost〉2005
                           介绍了Boost的一些重要类库,但其余的还是要看Boost自带文档。

    C++ Template参考:〈C++ Templates - The Complete Guide〉2002    
    对template讲得相当深,无愧于The Complete Guide的书名,ytam说可以作为MCD的前传和续集。

〈C++ Common Knowledge〉 中文版, Stephen C. Dewhurst 
   跑杯茶怡然的看看C++里面那些值得吹嘘的知识点是个不错的场景。

4.Effective 类
   Herb Sutter, Andrei Alexandrescu合著一本:
 〈C++.Coding.Standards - 101.Rules.Guidelines〉2004

    Meyers的三本Effecive:
 〈Effective C++ 3rd〉 2005
 〈More Effective C++〉
 〈Effective.STL.50.Specific.Ways.to.Improve.Your.Use.of.STL〉

 〈C++ Gotchas〉2002,Stephen C. Dewhurst

    对于后四本,我老觉得是在语言规范下绕来绕去,从工作角度来看是实用,从个人角度看来是无聊。

5.精力过剩类
  〈Modern C++ Design - Generic Programming and Design Patterns 〉2001 Andrei Alexandrescu ,推荐,C++里最值得一读的书。

   〈C++ Template Metaprogramming Concepts,Tools and Techniques from Boost and Beyond 〉
     
    Herb Sutter的三本Exceptional,rayman说是打击信心用的:
   〈Exceptional C++ - 47 Engineering Puzzles, Programming Problems, and Solutions 〉1999
   〈More Exceptional C++〉2001
   〈Exceptional C++ Style - 40.New.Engineering.Puzzles.Programming.Problems.and.Solutions〉2004

posted @ 2005-10-11 11:55 江南白衣 阅读(7366) | 评论 (21)编辑 收藏

仅列出标题  

导航

统计

公告

花钱的年华CSDN主站

常用链接

留言簿(1)

随笔档案

积分与排名

最新评论

阅读排行榜