大致过程
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)
}
}
}