ANE 的制作方式

 

第一步:打开vs2010,新建工程 win32工程 NativeAdd,dllmain.cpp 修改成如下图所示:

// dllmain.cpp : §°? DLL |?¨¨°?¨?¨?ê

#include <Windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,

                       DWORD  ul_reason_for_call,

                       LPVOID lpReserved

                                                )

{

 

         return TRUE;

}

 

建立头文件NativeAdd.h ,内容如下:

 

#include "FlashRuntimeExtensions.h"  
extern "C" 

 __declspec(dllexport) void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet);   
  __declspec(dllexport) void ExtFinalizer(void* extData);   
  __declspec(dllexport) FREObject doAdd(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]); 
    __declspec(dllexport) FREObject getCpu(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]); 

 

建立主文档:

 

// NativeAdd.cpp : 定义 DLL 应用程序的导出函数。
//
#include "NativeAdd.h"
#include <stdlib.h>
extern "C"
 
{
 
        FREObject doAdd(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
        {
       
         int32_t one, two, sum;
 
          FREObject result;
 

          FREGetObjectAsInt32(argv[0], &one);
 
          FREGetObjectAsInt32(argv[1], &two);
 

          sum = one + two;
 

          FRENewObjectFromInt32(sum, &result);
   return result;
 
        }

        void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions)
 
        {
 
          *numFunctions = 1;
 
          FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*(*numFunctions));
 
       
 
          func[0].name = (const uint8_t*)"doAdd";
 
          func[0].functionData = NULL;
 
          func[0].function = &doAdd;


         *functions = func;
 
        }
 

        void ContextFinalizer(FREContext ctx)
        {
 
          return;
 
        }
 

        void ExtInitializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)
        {
 
          *ctxInitializer = &ContextInitializer;
 
          *ctxFinalizer   = &ContextFinalizer;
 
        }
 

        void ExtFinalizer(void* extData)
        {
 
          return;
 
        }
 

}


 

 

导入FlashRuntimeExtensions.h文件FlashRuntimeExtensions.lib (放在资源文件夹下)。

Vc 环境设置:点击项目,右键属性,弹出的窗口中找到 c/c++,预编译头文件,选择不预编。

第二步:在flashBuilder 中建立库项目 NativeAdd

 

package com.test
{
 import flash.external.ExtensionContext;

 public class NativeAdd
 {
  private var context:ExtensionContext;
  public function NativeAdd()
  {
   
   context=ExtensionContext.createExtensionContext("com.test.NativeAdd","");
  }
  public function doAdd(a:int,b:int):int
  {
   var result:int=0;
   result=context.call("doAdd",a,b) as int;
   return result;
  }
  public function dispose():void
  {
   context.dispose();
  
  }

 }
}

 

第三步:建立 extension.xml  文件

<?xml version="1.0" encoding="UTF-8"?>

<extension xmlns="http://ns.adobe.com/air/extension/3.1">  

    <id>com.test.NativeAdd</id>  

    <versionNumber>1</versionNumber>  

        <platforms>  

        <platform name="Windows-x86">  

            <applicationDeployment>  

                <nativeLibrary>NativeAdd.dll</nativeLibrary> 

                <initializer>ExtInitializer</initializer> 

                <finalizer>ExtFinalizer</finalizer> 

            </applicationDeployment> 

        </platform>  

    </platforms>  

</extension> 

第四步:

  创建 flex/sdk/bin 的环境变量。

第五步新建一个文件夹

里面装入 NativeAdd.swc (和它解压之后的library.swf),NativeAdd.dll,创建一个密钥,然后新建一个文本,内容如下:

adt -package -tsa none -storetype pkcs12 -keystore zz.p12 -storepass zz -target ane NativeAdd.ane extension.xml -swc NativeAdd.swc -platform Windows-x86 library.swf NativeAdd.dll

 

修改名字为.bat.点击运行,可生成。