Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
【标  题】:SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
【关键字】:SWIG,C/C++,Java,Python
【来  源】:http://www.blogjava.net/calvin/archive/2005/10/24/16606.html

SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂

Your Ad Here    按照SWIG的思路,C/C++是很优秀的library级代码语言,而写界面等方面则是Java、C#、Python们占优。所以,swig让你可以在高阶语言里调用C/C++写的类库,并且不是简单的跨语言调用,而是把类库编译为宿主语言里Class这样的一等公民。
    原本担心这个项目有点边缘化,一看原来Ruby和Python早就靠它从C/C++里溜东西出来了。对于python, ruby这些家底不厚的新生代来说,C/C++的类库很有魅惑力。即使是富得不行的Java,也靠swig为SDL搞了个java版
   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(Simplified Wrapper and Interface Generator) 为你自动生成了这个冗长的wrapper文件和相应的Java类,其中还妥善完成了类型转换,函数指针、模板这些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 i = new Example().add(42,105);

  3.总结
    当你山穷水尽,准备要重新发明轮子的时候,总该想起有个swig,可以把C/C++的轮子,换装到你的语言上。
Java下的框架编程(2)-对泛型的无聊用法和为擦拭法站台:【上一篇】
重返Linux与C,地狱的又一季:【下一篇】
【相关文章】
  • Java下的框架编程(2)-对泛型的无聊用法和为擦拭法站台
  • Java下的框架编程(3)--关于反射的碎话
  • Python+wxWidgets快速开发桌面小程序
  • Java下的框架编程(4)--Annotation vs XML vs Interface 最新一Round
  • Java EE 5.0 规范快读
  • Java开发者~Java架构师:包办婚姻?
  • Java开发的10个必备工具?
  • Java AIP Flow图
  • 最好的Java程序员免费学习材料(English)
  • 最近仔细研究了一下Java的NIO以及线程并发,搞清了点思路,特作笔记如下(NIO篇)
  • 【随机文章】
  • 防止ACCESS数据库被下载的方法后续
  • WAP版的手机号码所在地查询
  • 18位公民身份证号码的编排规则
  • Concurrency and Coordination Runtime读后感(2)
  • 编译器C-Free V352注册算法分析
  • 重构动画FLASH时间轴(全)
  • 一个超酷的界面程序源代码
  • 数据仓库小解
  • 轻松揪出数据库
  • 对信息安全专家的要求(zz)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.