Flex ANE介绍
最近在用Flex做项目,需要Flex连接刷卡器读卡,而卡片厂商只提供了dll、lib库,还提供java vb等一些语言的demo,没有flex的demo,于是开始研究flex的ane。
学过java的朋友可以把flex的ane理解成为java中的jni,就是调用本地方法。
但在网上找ane关于window-x86的资料,聊聊无几,在网上参考了这一篇,终于写出了helloworld程序 AIR Native Extension c++ 鼠标全局坐标 配置环境到发布全程讲解
,这篇文章对我帮助很大,但也有一点没讲到的地方,在此我以简单计算器的例子继续介绍一下flex端的方法如何传值到C++端,方便后人学习。
Flex端调用add(x, y)返回结果,以Number为例子。官方也提供的详细的中文文档air_extensions.pdf
calc.cpp
#include "FlashRuntimeExtensions.h"#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>extern "C"
{//初始化(必须的)__declspec(dllexport) void initializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet);//终结(必须的)__declspec(dllexport) void finalizer(void* extData);//被AS调用的__declspec(dllexport) FREObject add(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]);
}extern "C"
{//具体方法FREObject add(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){//入参x、y转换 将flex的number转换为double类型double x;FREGetObjectAsDouble(argv[0], &x);double y;FREGetObjectAsDouble(argv[1], &y);//返回值FREObject value = argv[2];FREObject result;//把结果赋值给resultFRENewObjectFromDouble(x + y, &result);//赋值给返回值中的result属性 Flex端可以add(x, y).result调用FRESetObjectProperty(value,(const uint8_t*)"result",result,NULL); return NULL;}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));//在初始化方法中声明可以被AS调用的方法func[0].name = (const uint8_t*) "add";func[0].functionData = NULL;func[0].function = &add;*functions = func;}void contextFinalizer(FREContext ctx){return;}__declspec(dllexport) void initializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer){*ctxInitializer = &contextInitializer;*ctxFinalizer = &contextFinalizer;}__declspec(dllexport) void finalizer(void* extData){return;}
}
calc.as
package com.chenlm
{import flash.external.ExtensionContext; public class calc{//与刚才c++项目中定义的函数名要一直public static const ADD:String = "add";//与extension.xml中的id标签一致public static const EXTENSION_ID:String = "com.chenlm.calc";private var context:ExtensionContext;public function calc(){//实例化上下文context = ExtensionContext.createExtensionContext(EXTENSION_ID,"");}public function add(x:Number, y:Number):Number{var obj:Object = new Object(); //远程调用上下文中的add方法 此处的入参对应C++中的<span style="font-family: Arial, Helvetica, sans-serif;">FREObject argv[]</span>context.call(ADD, x, y, obj)return obj.result; }}
}
extension.xml代码
<extension xmlns="http://ns.adobe.com/air/extension/3.1"><id>cn.lyj.mouse.mousePosition</id><versionNumber>1.0.0</versionNumber><platforms><platform name="Windows-x86"><applicationDeployment><nativeLibrary>calc.dll</nativeLibrary><initializer>initializer</initializer><finalizer>finalizer</finalizer></applicationDeployment></platform></platforms>
</extension>
Main.mxml代码
Main.mxml代码
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"xmlns:mx="library://ns.adobe.com/flex/mx"width="333" height="189" "><s:layout><s:HorizontalLayout verticalAlign="middle"/></s:layout><fx:Script><![CDATA[import com.chenlm.calc;var c:calc = new calc();protected function calc(event:Event):void{result.text = c.add(Number(x.text), Number(y.text));}]]></fx:Script><mx:TextInput id="x" restrict="0-9/."/><mx:TextInput id="y" restrict="0-9/."/><s:Button label="计算" click="calc()"><s:Label id="result" text="结果"/>
</s:WindowedApplication></pre><br>
Flex ANE介绍相关推荐
- 2.React Native Flex布局介绍以及实践
好久没有写博客,一直在用自己的印象笔记记录一些问题.2017年了,想重新的把博客写起来.也希望通过这个平台交一些朋友. 没有具体的介绍基本的语法,主要是说明了与标准的CSS Flex的一些区别以及一个 ...
- 最简单的flex布局介绍(转自阮一峰)及筛子案例
大佬阮一峰在15年的博客至今我认为无人可以超越 所以就直接引用他的博客 Flex 布局教程:语法篇 - 阮一峰的网络日志 (ruanyifeng.com) 在引用之后为一个flex布局小demo Fl ...
- FLEX SharedObject介绍及应用
ShareObject介绍: 1 ShareObject,顾名思义共享对象,而通常意义上的共享,从B/S结构上来讲,无非是客户端(浏览器端)的共享和服务器端的共享了,不错,ShareObject刚好份 ...
- 微信小程序布局display flex布局介绍
display flex是什么? 微信小程序最近火的不要不要的,下载开发工具测试了一下,小程序对css支持很好, 布局使用display flex布局火力强大,不太了解或者对flex布局比较生疏的童靴 ...
- JavaScript 5/30:Flex Panel Gallery即FLEX布局的图片库
JavaScript30 为Wes Bos推出的一项为期30天的挑战,旨在帮助人们用纯JavaScript来实现效果,初学者若想在JS方面快速精进,不妨一试.本题为第五题. 实现效果 点击任意一张图片 ...
- Flex与.NET互操作(十六):FluorineFx + Flex视频聊天室案例开发
本文将使用FluorineFx和Flex结合介绍一个简单的视频聊天室案例开发,希望通过此篇和大家交流FluorineFx和Flex的相关技术,同时也希望本篇可以帮助到需要使用FluorineFx做及时 ...
- image 微信小程序flex_微信小程序进阶-flex布局
对于一个后端程序员来说最麻烦的就是布局了,今天就介绍下小程序的布局,介绍一种高效的小程序布局方案.笔者之前也做过native app的布局,对比下来,小程序的布局没有native那么灵活,毕竟goog ...
- 你不能只会flex居中布局,精制动画讲解所有flex布局方式,通俗易懂教程
flex布局相信很多人都已经有不少了解,其优势和作用被越来越多的开发者所喜爱,网上也有很多关于关于flex的介绍和教程.但是根据笔者的面试经验发现,很多人尤其是初中级开发者对flex布局都仅仅停留下c ...
- CSS中flex的用法( 学习笔记 )
flex( 弹性盒.伸缩盒 ) flex 的介绍 flex是CSS中的又一种布局手段,它主要用来代替浮动来完成页面的布局 flex可以使元素具有弹性,让元素可以随页面的大小的改变而改变 弹性容器 要使 ...
- 前端笔记(03)——一文看懂flex布局
文章目录 前言 一.flex基本介绍. 二.父容器属性介绍 1.父容器属性概述 2.flex-direction属性 3.flew-wrap属性 4.flex-flow复合写法 5.justify-c ...
最新文章
- 对AI行业未来发展的一些看法
- BCH期货合约将在美国挂牌交易所上线
- Android开发:Handler的简单使用(一)
- “Duke选择大奖”荟萃2009最具创新的Java技术应用
- Android UI编程之自定义控件初步(下)——CustomEditText
- 温州大学《机器学习》课程课件和视频(四)朴素贝叶斯
- 吐血整理:关于机器学习不可不知的15个概念
- “腾讯也感受到危机了!”
- 容器 - HashTable
- 【HDU6194】string string string(统计出现k次的子串数目---后缀数组+st表)
- mis服务器系统,MIS系统中服务器推技术的实现
- GIS招聘 | 青海省省直事业单位(含地信、测绘等专业)
- Leetcode每日一题——T32. 最长有效括号(难)——栈
- 体系结构24_输入输出系统(1)
- 笔记:物化的技术进步
- 挖藕!模拟sql抓取qq密码
- 章节十二:编程思维:如何debug
- 一个简单的软件测试流程
- 计算机专业专科学校排名分数,计算机专业专科学校录取分数
- android 开发蓝牙电子秤,GitHub - xiangbohua/scales-bridge: scales-bridge 电子称 蓝牙电子秤 连接库...
热门文章
- Preliminary Design Review(初步设计评审(回顾))
- SEO: 使用 rel=canonical 为类似网页或重复网页指定权威网页
- 阿里云DRDS分布式数据库 - 分库分表
- php v9 用户头像,phpcms v9前台会员中心上传头像可getshell | CN-SEC 中文网
- 机器学习——AdaBoosting
- 深度理解感受野(一)什么是感受野?
- MySQL 视图、索引、外键关联策略
- ubuntu上安装微信教程
- 淘宝二手闲鱼平台按关键词搜索闲鱼商品接口,item_search-按关键字搜索闲鱼商品接口接入说明方案
- QQ群霸屏技术教程:不论霸屏技术,只谈QQ认证群