AIR的本地代码访问——Aperture框架简介

CSDN的BLOG一向很垃圾,没办法,写了3次,还是该没图没图,该提交提交不上。

详细内容,还是看这里吧:http://isaaq.javaeye.com/admin/blogs/402196

 

一、简介

 

    一提到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的方法就需要开发人员自己去发掘了。

 

  

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值