SWIG——万能粘合剂

SWIG——万能粘合剂


       最近在用SWIG,以C#做界面,C++为底层来做项目。主要是因为公司的平台是c++的,年代久远了。但又想界面把弄的又潮又炫,用c++做出WIN7的效果,那得做死人。所以为了效率高点,就是用C#了。自己不想写,就上网找了一篇简单的文章记录一下。当然这里还没有说复杂的参数数据传递的问题,需要Marshing一下,这里就不提了,有兴趣的自己找找。


    转载:http://www.cppblog.com/calvin/archive/2005/10/24/833.html

文艺一点总结,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++的轮子,换装到你的语言上。

Marshaling
WCF、WPF、Silverlight和区别(转) SilverLight可以看作是WPF的一个简化版本,或者一个轻量版本。 SilverLight是基于浏览器插件的,在浏览器中运行,服务器端不需要部署任何环境,客户端只需要安装Runtime浏览器插件,无须安装.net Framework 3.0。所以,SilverLight的运行环境不受操作系统和浏览器的种类限制(更准确的说,是受到较少的限制)。 WPF可以编写Web程序或者桌面应用程序,可以直接编译为独立运行的.Exe文件。WPF运行时必须安装.net Framework 3.0。这就要求WPF目前运行的操作系统必须是Windows Vista或者Windows XP SP2。 此外,SilverLight作为WPF的一个轻量级的版本,比WPF削减了很多功能。 比如,WPF支持直接在XAML中绑定触发来触发动画,而SilverLight就只能通过托管代码或者Javascript来进行。 另外,WPF直接支持3D效果和3D镜头变换,但是SilverLight就不支持这个了。 Silverlight原名WPF/E 就是WPF Everywhere 是WPF的一个子集。 由于名称的关系, WPF与WPF/E一直被认为是类似的东西。 其实两者除了呈现UI的部分使用的是共通语言 XAML 之外,两者在本质上有很大的不同。甚至,XAML对WPF与Silverlight有不同的意义,也不能算是两者间"共通的语言。 XAML对WPF来说,是一种把.NET程序语言改用XML来描述的方式。换句话说,XAML用在WPF上,像是另外一种程序语言。与C#, VB , IronPython相似。所以XAML能做的, C# , VB一样都可以做到。但是反过来, C# , VB 能做的,XAML不一定能做到,因为XAML是为了配合开发工具,特别设计出来的一种语言,本身有他的局限性,所以还是得配合正规的程序语言,才能完成一个真正有用的程序。 但是以目前XAML所具备的能力,不靠C# , VB而做到平常简单Flash可以做到的,应该是没啥问题。因此, Application = Code + Markup的作者Petzold才会把这本书的结构写成先用以C#来写WPF程序,后半部才介绍XAML。 避免大家误解 WPF = XAML。 XAML还可以用在WF上,所以并不局限于WPF。 如果用了XAML,以为这就是WPF的全部,就大错特错啰! 然而,XAML对Silverlight来说,本质比较贴近SVG。XAML用来描述构成画面的结构树,然后配合Javascript去操作这颗表示UI的树,以达到互动的效果。 所以对Silverlight来说, XAML像是用来扩充HTML/CSS原本不足的一组Tag。就像Firefox之中,一样可以用Javascript去操作SVG所描述的画面,藉以达成多媒体效果。 WCF,你就先把它想成Web Service的下一代也没什么问题。 WCF为Windows Communication Foundation,是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WebService,MSMQ等技术的并集。 WPF是Windows Presentation Foundation,微软新发布的Vista操作系统的三大核心开发库之一,其主要负责的是图形显示,所以叫Presentation(呈现)。 WPF相对于WinForm,将美工(控件样式设置)与实现(代码的业务实现)分开,是一种新的架构方式。 VS2008新特性是.Net Framework 3.5。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值