1,需要用到的开发工具有:1Alchemy 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 SDKAlchemy的路径,我们可以在其启动脚本中把

  1. PATH=/usr/local/bin:/usr/bin:/bin:$PATH 

改成

  1. source /cygdrive/c/alchemy/alchemy-setup  
  2. PATH=/usr/local/bin:/usr/bin:/bin:/cygdrive/c/flex/bin:$PATH 

4,启动Cygwin,若出现下述提示信息:

  1. cygpath:command not found 

则修改cygwin.BAT文件如下:

  1. @echo off  
  2. C:  
  3. set CYGWIN=tty notitle glob  
  4. set PATH=%PATH%;c:\cygwin\bin;c:\cygwin\sbin;c:\cygwin\usr\bin;c:\cygwin\usr\sbin;c:\cygwin\usr\local\bin  
  5. set LD_LIBRARY_PATH=c:\cygwin\lib;c:\cygwin\usr\lib;c:\cygwin\usr\local\lib  
  6. chdir C:\cygwin\bin  
  7. bash --login -i 

5,重新启动Cygwin,进入alchemy目录,输入:

  1. ./config 

6,输入下述命令开启alchemy 

  1. alc-on 

Alchemy的开发环境就算配置完成了。

7,stringecho目录下,运行:

  1. 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)代码如下:

  1.  package {  
  2.     import flash.display.Sprite;  
  3.  
  4.     import cmodule.stringecho.CLibInit;  
  5.     public class EchoTest extends Sprite  
  6.     {  
  7.         public function EchoTest()  
  8.         {  
  9.             var loader:CLibInit = new CLibInit;  
  10.             var lib:Object = loader.init();  
  11.             trace(lib.echo("foo"));  
  12.         }  
  13.     }  

9,最后,我们来看下c语言写的源代码

         1)首先,需要引入下述头文件:

  1. //Header file for AS3 interop APIs  
  2. #include "AS3.h"  

       2)然后我们需要定义一个入口点,这里是main函数。main函数代码如下:

  1. //entry point for code  
  2. int main()  
  3. {  
  4.     //define the methods exposed to ActionScript  
  5.     //typed as an ActionScript Function instance  
  6.     AS3_Val echoMethod = AS3_Function( NULL, echo );  
  7.     // construct an object that holds references to the functions  
  8.     AS3_Val result = AS3_Object( "echo: AS3ValType", echoMethod );  
  9.     // Release  
  10.     AS3_Release( echoMethod );  
  11.     // notify that we initialized -- THIS DOES NOT RETURN!  
  12.     AS3_LibInit( result );  
  13.     // should never get here!  
  14.     return 0;  

         首先定义了要暴露给外部ActionScript代码进行调用的方法,其类型是AS3_Function,然后构造一个对象,此对象拥有前面那个公开函数的引用,此对象构造完成后,则可以释放掉原来那个echoMethod对象,最好通知外部as程序里面的已经构造完毕。

         3)下面来看下要暴露给外部的echo方法,它只是简单地接收一个字符串,再将其返回。程序中首先通过AS3_ArrayValue对传入的参数进行

          解析,得到传入的字符串,若为空,则返回一个"null"字符串,否则返回原来的字符串。

  1.    //Method exposed to ActionScript  
  2. //Takes a String and echos it  
  3. static AS3_Val echo(void* self, AS3_Val args)  
  4. {  
  5.     //initialize string to null  
  6.     char* val = NULL;  
  7.     //parse the arguments. Expect 1.  
  8.     //pass in val to hold the first argument, which  
  9.     //should be a string  
  10.     AS3_ArrayValue( args, "StrType", &val );  
  11.     //if no argument is specified  
  12.     if(val == NULL)  
  13.     {  
  14.         char* nullString = "null";  
  15.         //return the string "null"  
  16.         return AS3_String(nullString);  
  17.     }  
  18.     //otherwise, return the string that was passed in  
  19.     return AS3_String(val);  
  20. }  
  21.