C語(yǔ)言嵌入聯(lián)接swig是一款非常優(yōu)秀的c語(yǔ)言開源工具,它能有效幫助用戶將 C/C++ 代碼與任何主流腳本語(yǔ)言相集成。英文名為Simplified Wrapper and Interface Generator,簡(jiǎn)單稱SWIG。
SWIG 基礎(chǔ)知識(shí)
SWIG 接口文件語(yǔ)法是 C 的一個(gè)超集。SWIG 通過一個(gè)定制 C 預(yù)處理器處理它的輸入文件。此外,接口文件中的 SWIG 操作通過一個(gè)百分比符號(hào) (%) 后跟的特殊的指令(%module、%constant 等)來(lái)控制。SWIG 接口還允許您定義以 %{ 開頭和以 %} 結(jié)束的信息塊。%{ 和 %} 之間的所有內(nèi)容會(huì)原封不動(dòng)地復(fù)制到生成的包裝器文件中。
模塊名稱的更多信息
可通過指定 %module "rubytest::test34::example,定義一個(gè)深度嵌套模塊 rubytest::test34::example。另一個(gè)選項(xiàng)是將 %module example 放在接口代碼中,在命令行添加 rubytest::test34 作為它的前綴,如下所示:
SWIG 接口文件必須以 %module 聲明開頭,例如 %module module-name,其中 module-name 是目標(biāo)語(yǔ)言擴(kuò)展模塊的名稱。如果目標(biāo)語(yǔ)言是 Ruby,這類似于創(chuàng)建一個(gè) Ruby 模塊?梢蕴峁┟钚羞x項(xiàng) –module module-name-modified 來(lái)改寫模塊名稱:在本例中,目標(biāo)語(yǔ)言模塊名稱為(或許您已猜到)module-name-modified,F(xiàn)在,讓我們看看常量。
SWIG模塊初始化功能
SWIG 擁有一個(gè)特殊指令 %init,用于定義模塊初始化功能。%{ … %} 代碼塊中 %init 之后定義的代碼會(huì)在模塊加載時(shí)調(diào)用。以下是代碼:
%module test
%constant char* Text = “Hello World with SWIG”
%init %{
printf(“Initialization etc. gets done here\n”);
%}
現(xiàn)在重新啟動(dòng) IRB。以下是在加載模塊后得到的代碼:
irb(main):001:0> require 'test'
Initialization etc. gets done here
=> true