按照SWIG的思路,C/C++是很優秀的library級代碼語言,而寫界面等方面則是Java、C#、Python們占優。所以,swig讓你可以在高階語言里調用C/C++寫的類庫,并且不是簡單的跨語言調用,而是把類庫編譯為宿主語言里Class這樣的一等公民。
    原本擔心這個項目有點邊緣化,一看原來Ruby和Python早就靠它從C/C++里溜東西出來了。對于python, ruby這些家底不厚的新生代來說,C/C++的類庫很有魅惑力。即使是富得不行的Java,也靠swig為SDL搞了個java版
      
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++的輪子,換裝到你的語言上。