1,需要用到的开发工具有:1)Alchemy 2)Cygwin 3)Flex SDK(3.2+) 4)Java(只需要JRE就够了) 5)Flex Builder
2,安装步骤:
1)Alchemy解压缩到c:/alchemy下
2)Flex SDK解压缩到c:/flex下
3)Cygwin在”选择包“这一步时,确保选中下述三个包:
a)Archive目录下的zip包
b)Devel目录下的gcc-g++包
c)Perl目录选择完全安装(Install)
3,为了让Cygwin在每次启动后知道Flex SDK和Alchemy的路径,我们可以在其启动脚本中把
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
改成
source /cygdrive/c/alchemy/alchemy-setup
PATH=/usr/local/bin:/usr/bin:/bin:/cygdrive/c/flex/bin:$PATH
4,启动Cygwin,若出现下述提示信息:
cygpath:command not found
则修改cygwin.BAT文件如下
复制代码
代码
@echo off
C:
set CYGWIN=tty notitle glob
set PATH=%PATH%;c:\cygwin\bin;c:\cygwin\sbin;c:\cygwin\usr\bin;c:\cygwin\usr\sbin;c:\cygwin\usr\local\bin
set LD_LIBRARY_PATH=c:\cygwin\lib;c:\cygwin\usr\lib;c:\cygwin\usr\local\lib
chdir C:\cygwin\bin
bash --login -i
复制代码
5,重新启动Cygwin,进入alchemy目录,输入:
./config
6,输入下述命令开启alchemy:
alc-on
Alchemy的开发环境就算配置完成了。
7,在stringecho目录下,运行:
gcc stringecho.c –O3 –Wall –swc –o stringecho.swc
一切顺利的话,将会生成stringecho.swc
8,下面来开发一个实例程序进行对stringecho.swc测试
1)新建一个新工程, ActionScript3工程或者 Flex工程都可以.
2)右键项目,选择”属性“-->ActionScript BuildPath-->Library path,选择”Add SWC"将刚才编译出来的 stringecho.swc加入项目中,特别
注意的一点是Link Type选择“Merged into code",否则运行时会报错"无法找到类 Cmodule.stringecho::CLibInit"
3)代码如下:
复制代码
代码
package {
import flash.display.Sprite;
import cmodule.stringecho.CLibInit;
public class EchoTest extends Sprite
{
public function EchoTest()
{
var loader:CLibInit = new CLibInit;
var lib:Object = loader.init();
trace(lib.echo("foo"));
}
}
}
复制代码
9,最后,我们来看下c语言写的源代码
1)首先,需要引入下述头文件:
//Header file for AS3 interop APIs
#include "AS3.h"
2)然后我们需要定义一个入口点,这里是main函数。main函数代码如下:
复制代码
代码
//entry point for code
int main()
{
//define the methods exposed to ActionScript
//typed as an ActionScript Function instance
AS3_Val echoMethod = AS3_Function( NULL, echo );
// construct an object that holds references to the functions
AS3_Val result = AS3_Object( "echo: AS3ValType", echoMethod );
// Release
AS3_Release( echoMethod );
// notify that we initialized -- THIS DOES NOT RETURN!
AS3_LibInit( result );
// should never get here!
return 0;
}
复制代码
首先定义了要暴露给外部ActionScript代码进行调用的方法,其类型是AS3_Function,然后构造一个对象,此对象拥有前面那个公开函数的引用,此对象构造完成后,则可以释放掉原来那个echoMethod对象,最好通知外部as程序里面的已经构造完毕。
3)下面来看下要暴露给外部的echo方法,它只是简单地接收一个字符串,再将其返回。程序中首先通过AS3_ArrayValue对传入的参数进行
解析,得到传入的字符串,若为空,则返回一个"null"字符串,否则返回原来的字符串。
复制代码
代码
//Method exposed to ActionScript
//Takes a String and echos it
static AS3_Val echo(void* self, AS3_Val args)
{
//initialize string to null
char* val = NULL;
//parse the arguments. Expect 1.
//pass in val to hold the first argument, which
//should be a string
AS3_ArrayValue( args, "StrType", &val );
//if no argument is specified
if(val == NULL)
{
char* nullString = "null";
//return the string "null"
return AS3_String(nullString);
}
//otherwise, return the string that was passed in
return AS3_String(val);
}
复制代码
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2010/07/07/1772959.html,如需转载请自行联系原作者