一、简介
一提到AIR,大家可能都会联想到那些丰富多彩、绚丽的界面,令人激动的互联网桌面应用能力。但是AIR贫乏的本地代码(Native Code)调用能力,使得它把大多数本地应用都拒之门外。
FluorineFx Aperture framework作为Fluorine的子项目,为我们提供了一个对本地OS支持的框架(windows only)。它以非侵入性的方式为AIR应用提供了对本地代码的扩展能力。在运行时期间,框架也会自动与您的AIR应用挂钩,而不需要额外安装和配置任何东西。
Aperture framework提供了一个AIR应用软件和自动化对象交互的桥梁。同时框架使用后期绑定访问自动化对象。
二、Hello World
1、建立本地代码:
1) 首先,我们新建一个ATL应用——airexec
2) 然后,选择创建DLL项目,并完成向导
3) 配置项目
a ) 使用静态链接
b) 运行时库配置:DEBUG —— /MTd RELEASE —— /MT
c) 由于AIR需要向导安装,同时不需要人工干预,故本地DLL也不要进行注册表登记:
4) 构建我们自己的本地实现类——MyClass
5)修改IDispatchImpl的参数wMajor 和 wMinor,改为 0xFFFF:
指定的值0xFFFFF告诉IDispatchImpl直接从您的模块的资源和类型库加载类型库,而这些类型库根本不需要被注册。
6) 好了,现在可以添加我们的自定义方法了,在IMyClass接口上添加方法Test:
7) 实现代码:
STDMETHODIMP CMyClass::Test(BSTR Something, BSTR* Result)
{
_bstr_t b = Something;
char* ch = b;
char ch2[256] = "已显示";
::MessageBoxA(NULL,ch,"",0); // 直接在Window下执行
strcat(ch2,ch);
*Result = _bstr_t(ch2); // 返回给Flex
return S_OK;
}
8) 编译程序
9) 打开本类型对应的.rgs文件,记下CLSID的值:
2、实现我们的AIR应用:
制作AIR的过程很简单,具体的步骤如下:
a) 导入相关DLL和AS文件,ATL项目生成的airexec.dll也同样导入:
b) 引入Aperture控件,并实现对本地DLL的CLSID的访问:
注意source属性,格式为——ATL项目名:CLASID
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns:aperture="com.fluorinefx.aperture.*" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function init() : void {
lc.Test("Hello World"); // 访问Test方法
}
private function onTest(event : ResultEvent) : void {
Alert.show(event.result.toString()); // 打印返回值
}
]]>
</mx:Script>
<aperture:LocalObject id="lc" showBusyCursor="true" source="airexec:3657D1C6-0D94-4CC3-8976-37E813C49B63">
<aperture:methods>
<aperture:method name="Test" result="onTest(event)"/>
</aperture:methods>
</aperture:LocalObject>
</mx:WindowedApplication>
c) 测试这个AIR:
先将Console.exe拷贝到big-debug目录下,并运行这个EXE:
用FLEX BUILDER运行这个AIR,运行结果如下:
此时的Hello World为C++的MessageBoxA所产生,也就是说已经调用本地代码了。点击确定后,结果如下:
此时的结果为C++返回给FLEX的结果,也就是返回的BSTR*指针的内容。
三、部署,最终验收
测试期间,我们用额外的Console.exe进行测试,而部署就不再需要了。我们只是把相关的dll参与部署:
直接生成AIR文件,然后再最终客户机器直接安装,并测试,结果与测试结果相同。
除了客户点击TestExec.air进行安装外,我们并没有额外干预客户机,也没有进行任何其他的操作。
这说明这个AIR跟正常的AIR没有区别,却可以直接调用本地DLL或EXE代码。
四、内建的基本操作
除了自定义本地代码外,Aperture framework也把常用的本地调用封装成了DLL,目前Documented的部分有3个DLL中的5个方法(参见官方文档aperture.chm),当然UnDocumented的方法就需要开发人员自己去发掘了。
- 大小: 31.5 KB
- 大小: 103.5 KB
- 大小: 103.9 KB
- 大小: 93.4 KB
- 大小: 61.8 KB
- 大小: 54.6 KB
- 大小: 21.8 KB
- 大小: 50.9 KB
- 大小: 69.9 KB
- 大小: 20.5 KB
- 大小: 77.3 KB
- 大小: 37.6 KB
- 大小: 33.6 KB
- 大小: 51.7 KB
分享到:
相关推荐
安装和运行 AIR 范例应用程序 Adobe AIR 更新 第 3 章: 使用 AIR API 特定于 AIR 的 ActionScript 30 类 具有特定于 AIR 功能的 Flash Player 类 特定于 AIR 的 Flex 组件 第 4 章: 适用于 AIR 开发的 Adobe ...
hplip 运行带有HPLIP驱动程序的CUPS实例的基于Alpine的Docker映像,以使用不具有AirPrint功能的本地USB打印机作为AirPrint打印机目录 关于取自tigerj / cups-airprint ,它是quadportnick / docker-cups-airprint的...
此脚本将连接到 CUPS 服务器,并且对于配置并标记为共享的每台打印机,将为 avahi 生成一个与 Apple 的 AirPrint 公告兼容的 .service 文件。可以使用任何可以配置为与 CUPS 一起使用的打印机。打印机不应在 CUPS 中...
它在Chrome或Firefox等网络浏览器中本地运行,并以紧凑,可访问的形式显示所选节目集的所有资料。 主要要素 典型情节的“伴随”页面的重要元素如下: 是的,您猜对了,这是一个切换的开始/顶部按钮,可以播放所选...
Flex 利用socket实现断点续传源码,有进度条,在本地代码可以完整运行,Flash Builder 4 ,eclipse ,jdk1.6,java代码偶尔会报线程错误,但是不会影响上传功能
入门使用degit 要在本地基于汇总创建一个新的Sapper项目,请运行npx degit " sveltejs/sapper-template#rollup " my-app 对于基于Webpack的项目,请运行npx degit " sveltejs/sapper-template#webpack " my-app 是一...
该项目已退役,已存档,不再受支持。 欢迎您继续使用和存储库。 Microsoft.Github CI演示... 为了在端口3000(可以用环境变量PORT修改)上启动本地服务器,请运行: npm install SET %COSMOS_DB_NAME%= SET %COSMOS_D
代码: : 环境设置: requirements.txt:仅用于部署到Heroku(本地不需要),因为anaconda安装存在问题。 Requirements-conda.txt:本地开发所需,因为我在本地使用conda。 运行:conda create --name <env> --...
Senko是基于ESP8266和ESP32的... 这意味着您需要重新启动才能运行最新的代码。 :construction: 您负责实施网络连接和重新启动策略! :fire: 安装 Senko由您导入的单个senko.py模块组成。 您可以使用Ampy或W
用户可以基于简单搜索或通过用户本地化使用自动车站搜索来获得波兰各地许多地方的空气质量信息。 创建该界面是为了允许用户快速估算所选位置的空气质量。 空气质量指标是根据世界卫生组织(世卫组织)提供的标准...
Google Chrome支持多标签浏览,每个标签页面都在独立的“沙箱”内运行,在提高安全性的同时,一个标签页面的崩溃也不会导致其他标签页面被关闭。此外,Google Chrome基于更强大的JavaScript V8引擎,这是当前Web...
您还可以通过以下方式使用AIR SDK ,直接从源代码运行 Tarpo,而无需安装它: /path/to/sdk/bin/adl /path/to/tarpo/application.xml 备份 Tarpo 会自动为您在本地应用程序商店中打开的任何文件创建安全备份副本。...
适用于Adobe:registered:ActionScript:registered:的自动UI测试器是一个纯ActionScript 3.0 SWF自动化测试工具,能够记录用户对SWF文件的操作并以高保真度对其进行回放。... 但是不支持设备/桌面上的AIR应用程序
28.1AdobeAIR运行时安装与配置 584 28.2使用FlashCS3IDE创建和部署AIR应用 585 28.2.1安装FlashCS3IDEupdate9.0.3 585 28.2.2创建和部署AIR应用 585 28.3使用FlexBuilder3创建和部署AIR应用 588 28.4AIR应用配置文件...
该软件在运行 Yosemite 的 Macbook Pro Retina 和 Macbook Air 上进行了测试。 如果您在 Linux 或 Windows 上测试,请告诉我结果。 用法 克隆这个仓库 创建本地 MySQL 数据库,架构在 将 .EXAMPLE.env 重命名为 ....
在测试前后运行代码 24.6节. 测试用例之间共享测试数据 24.7节. 处理测试用例事件 24.8节. 用FlexUnit测试可视化组件 24.9节. 安装和配置Antennae 24.10节. 生成自动测试集 第二十五章. 编译与调试(772) 25.1节. ...
近日在CDB并行测试中发现一个问题:我们需要的小区负荷话统结果总是为零,开始还以为小区负荷太小,于是加大短消息下发数量,但还为零,于是在程序中加入测试代码,把收到的数据在BAM上打印出来, 结果打印出来的...
运行以下命令: # Clone this repo git clone https://github.com/shootismoke/webapp && cd webapp # Install dependencies. yarn install # Fill in secret tokens. cp .env.example .env.development # Run the ...
本软件的程式码是基于其他开放源代码软件所撰写,包括WebKit和Mozilla,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。软件的名称是来自于又称作“Chrome”的网络浏览器图形使用者界面(GUI)...
一键跳转开发者选项,避免安卓由于平台差异导致的入口不一致3、【本地语言】 一键跳转本地语言,避免安卓由于平台差异导致的入口不一致4、【沙盒浏览】 App 内部文件浏览的功能,支持删除和预览, 并且能通过 AirDrop...