ANE 的制作方式
第一步:打开vs2010,新建工程 win32工程 NativeAdd,将dllmain.cpp 修改成如下图所示:
// dllmain.cpp : 定§义°? DLL 应|用?程¨序¨°的?入¨?口¨点?。ê
#include
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
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 文件
第四步:
创建 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.点击运行,可生成。