이 과정을 통해 배울 수 있는 것:
Windows용 AIR Native Extension에 패키지로 준비된 AIR 라이브러리 만들기.

1단계: Flex 라이브러리 프로젝트 만들기

Flash Builder에서 File > New > Flex Library Project를 선택합니다:

대화 상자가 나타나면 Include Adobe AIR libraries를 선택합니다. 프로젝트의 이름을 지정하고 저장하십시오. 저는 DiaDrawWindowsANETutorialAIRLib로 지정했습니다.

New Flex Library 대화 상자의 다음 단계를 기본값으로 설정하고 Finish를 클릭하여 AIR 라이브러리 프로젝트를 만듭니다.

2단계: ANE용 AIR 래퍼 만들기

이 단계에서는 AIR 라이브러리에 ActionScript 클래스를 추가합니다. 이 클래스는 Windows와의 대화를 목적으로 합니다.

새 ActionScript 클래스를 프로젝트의 src/ 폴더에 추가하고 WindowsExtensionWrapper라는 이름을 지정하고 수퍼 클래스를 flash.events.EventDispatcher로 설정하고 원하는 패키지에 넣습니다. 저는 com.diadraw.extensions로 지정했습니다.

왜 EventDispatcher의 하위 클래스죠?

Adobe AIR Native Extension에서 발생하는 많은 작업은 비동기입니다. Windows DLL에서 비동기 이벤트를 가져 오는 것은 DLL의 코드가 AIR 라이브러리와 통신할 수 있는 몇 가지 방법 중 하나입니다. EventDispatcher를 상속하면 이러한 이벤트를 ANE를 사용하는 응용 프로그램에 다시 전달할 수 있습니다.

이 튜토리얼에서는 Windows에서 메시지를 전달하는 것에 대해서 다루지는 않습니다.

Flash Builder가 자동으로 다음과 같이 만듭니다.

package com.diadraw.extensions
{
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;

    public class WindowsExtensionWrapper extends EventDispatcher
    {
        public function WindowsExtensionWrapper(target:IEventDispatcher=null)
        {
            super(target);
        }
    }
}

3단계: 확장 컨텍스트 추가

새로 생성된 클래스에 생성자에서 확장 컨텍스트를 만드는 기능을 추가합니다. 나중에 네이티브 코드를 호출하려면 컨텍스트 인스턴스가 필요하므로 private 클래스 멤버로 만듭니다.

private var m_extContext : ExtensionContext = null;

ExtensionContext를 인스턴스화 하려면 고유한 문자열, 즉 확장 ID가 필요합니다. 네이티브 코드에서 올 수 있는 이벤트도 청취해야 합니다.

아래는 WindowsExtensionWrapper 클래스의 수정된 코드입니다.

package com.diadraw.extensions
{
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.events.StatusEvent;
    import flash.external.ExtensionContext;

    public class WindowsExtensionWrapper extends EventDispatcher
    {
        public function WindowsExtensionWrapper( _target : IEventDispatcher = null )
        {
            super( _target );

            // Create a new extension context and listen for status events from it:
            m_extContext = ExtensionContext.createExtensionContext( EXTENSION_ID, null );
            m_extContext.addEventListener( StatusEvent.STATUS, onStatusEvent );            
        }

        private function onStatusEvent( _event : StatusEvent ) : void
        {
            // Here you can add functionality to deal with the various events
            // that you may need to dispatch from native code.
            // For the moment let's just log what comes in for now:
            trace( "Event code: " + _event.code + ", event level: " + _event.level );
        }

        // For this tutorial we'll need one ExtensionContext instance
        // and we'll need to keep it while our ANE is in use:
        private var m_extContext : ExtensionContext = null;

        // The extension ID needs to be a unique string:
        private static const EXTENSION_ID : String = "com.diadraw.extensions.tutorial.WindowsExtension";
    }
}

4단계: 익스텐션의 AIR API 추가

AIR 라이브러리의 핵심입니다. 이 튜토리얼의 이전 단계에서 작성한 네이티브 코드와 응용 프로그램 간의 인터페이스 역할을 하는 함수입니다.

음, 이 경우에는 하나의 기능입니다. WindowsExtensionWrapper 클래스에 다음 공용 메서드를 추가합니다.

public function passString ( _message : String ) : String
{
    // Calls the ASPassAString function (exposed as "as_passAString" to ActionScript)
    // that we defined in dllMain.cpp:
    // passes a string to it and expects a strnig back.
    return m_extContext.call( "as_passAString", _message ) as String;
}

5단계: 확장 설명자(extension descriptor) 추가

확장(extension) 설명자는 AIR에게 네이티브 라이브러리에 대해 알려줍니다. 어떻게 작동하는지 알려면 여기를 클릭하십시오.

새 XML 파일을 AIR 라이브러리의 src 폴더에 추가하고 이름을 DiaDrawWindowsANETutorialAIRLib-extension.xml로 지정합니다. 실제로 이름을 지정할 수 있습니다.

프로젝트는 이제 다음과 같이 보입니다.

그리고 이것은 확장 파일에 포함되어야 합니다:

<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="http://ns.adobe.com/air/extension/3.1">

  <!-- This is the extension ID: the same unique string
       you defined in WindowsExtensionWrapper.as -->
  <id>com.diadraw.extensions.tutorial.WindowsExtension</id>

  <versionNumber>1.0.0</versionNumber>

  <platforms>

        <platform name="Windows-x86">
            <applicationDeployment>
                <!-- The name of the DLL file: -->
                <nativeLibrary>DiaDrawWindowsANETutorialDLL.dll</nativeLibrary>

                <!-- The names of the extension initializer
                     and finalizer functions you defined
                     in dllMain.cpp: -->
                <initializer>ExtensionInitializer</initializer>
                <finalizer>ExtensionFinalizer</finalizer>
            </applicationDeployment>
        </platform>

  </platforms>
</extension>

프로젝트를 빌드하여 컴파일러 오류가 발생하지 않는다면 ANE를 패키징 할 준비가 된 것입니다.

원문: http://easynativeextensions.com/windows-ane-tutorial-the-air-library/