大致过程
1.创建SWIG接口文件 2.处理接口文件生成相应的AS文件和C/C++文件 3.将as文件编译成abc文件 4.实现接口 5.打包
案例1: 我要在AS中使用C的加法, 通过add(value1, value2)调用
编写SWIG接口文件, 建个文件随便命名(拓展名为i), 这里假定是example.i, 用编辑器打开文件, 写入
%module AddExample %{ extern int add(int value1, int value2); %} extern int add(int value1, int value2);
编写一个MakeFile文件, 写入
all: check @echo "-------- PassingData --------" @echo "-> Generate SWIG wrappers around the functions in the library" "$(FLASCC)/usr/bin/swig" -as3 -module AddExample -outdir . -ignoremissing -o AddExample_wrapper.cpp example.i @echo "-> Compile the SWIG wrapper to ABC" $(AS3COMPILERARGS) -abcfuture -AS3 -import $(call nativepath,$(FLASCC)/usr/lib/builtin.abc) -import $(call nativepath,$(FLASCC)/usr/lib/playerglobal.abc) AddExample.as include ../Makefile.common clean: rm -f
第4行通过example.i接口变出了2个文件
第7、8行通过AddExample.as编译出AddExample.abc文件
接下来运行Cygwin进入到文件目录, 使用make命令, 然后查看目录下是不是多了3个文件呢?AddExample.as、AddExample_wrapper.cpp、AddExample.abc 这些文件我们就让他保留原样吧。
然后我们要写方法实现了, 新建一个implement.cpp文件, 写入
int add(int value1, int value2) { return (value1+value2); }
在然后建一个main.cpp文件, 写入
#include "AS3/AS3.h" int main(int argc, char *argv[]) { AS3_GoAsync(); }
这个文件干什么用的? 抱歉,我也不怎么清楚。
最后就是打包SWC了, 我们在make文件中添加一句命令
@echo "-> Compile the library into a SWC" "$(FLASCC)/usr/bin/g++" $(BASE_CFLAGS) AddExample.abc AddExample_wrapper.cpp main.cpp implement.cpp -emit-swc=sample.add -o add.swc
试试看在make一次, 是不是看见了我们想要的add.swc了呢?
最后,有几个文件是我们不需要的,我们可以在生成swc后删除它们,所以把"rm -f "改成"rm -f *_wrapper.cpp *.as *.abc"是不错的选择, 赶快去试一下add.swc吧
package { import flash.display.Sprite; import sample.add.CModule; public class UnitTest extends Sprite { public function UnitTest() { CModule.startAsync(this); var test:int = AddExample.add(4, 8); trace(test) } } }