使用SWIG创建swc之一(基本方法的调用)

阅读更多

 

大致过程

 

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)
		}
	}
}

 

 

你可能感兴趣的:(flasCC,AS3)