Platform/QT QT to Adobe Flash
  • 728x90
    반응형

     

     

     

    QT APP 에서 flash ActionScript 함수 호출

    • Adobe Flash Platform 도움말 (ExternalInterface 클래스 사용)

     

    🎯 컨테이너에서 ActionScript 코드 호출

    컨테이너는 함수에 있는 ActionScript 코드만 호출할 수 있고 다른 ActionScript 코드는 호출할 수 없다.

    컨테이너 응용 프로그램에서 ActionScript 함수를 호출하려면 ExternalInterface 클래스로 함수를 등록한 다음 컨테이너의 코드에서 호출해야 한다.

     

    먼저 ActionScript 함수를 등록하여 컨테이너에서 사용할 수 있도록 나타내야 한다. 다음과 같이 ExternalInterface.addCallback() 메서드를 사용한다.

     

    ActionScript

    function callMe(name:String):String
    {
    	return "busy signal";
    }
    ExternalInterface.addCallback("myFunction", callMe);

     

    addCallBack() 메서드는 두 가지 매개 변수를 사용한다. 먼저 문자열로 된 함수 이름에 의해 컨테이너에서 함수를 인식하게 된다. 두 번째 매개 변수는 컨테이너가 정의된 함수 이름을 호출할 때 실행될 실제 ActionScript함수이다.

     

    이러한 이름은 고유하므로 실제 ActionScript함수에 다른 이름이 있더라도 컨테이너에서 사용할 함수 이름을 지정할 수 있다. 이것은 함수 이름을 모르는 경우, 예를 들어 익명 함수가 지정되거나 호출할 함수가 런타임에 확인되는 경우에 특히 유용하다.

     

    데스크톱 응용 프로그램에서 실행되는 SWF 파일에서 ActionScript 함수를 호출할 때 등록된 함수 이름 및 매개 변수를 XML 형식 문자열로 직렬화해야 한다. XML 문자열을 매개 변수로 ActiveX 컨트롤의 CallFunction() 메서드를 호출하는 방식으로 호출이 실제로 수행된다.

     

    ActionScript함수의 반환 값은 다시 컨테이너 코드로 전달된다. 호출자가 브라우저의 JavaScript인 경우에는 직접 값으로 전달되고 호출자가 ActiveX 컨테이너인 경우에는 XML 형식 문자열로 직렬화되어 전달된다.

     

     

    🎯 외부 API의 XML 형식

    Shockwave Flash ActiveX 컨트롤을 호스팅하는 ActionScript와 응용 프로그램 간의 통신은 특정 XML 형식을 사용하여 함수 호출과 값을 인코딩한다.

     

    외부 API에서 사용하는 XML 형식에는 두 부분이 있다. 한 가지 형식은 함수 호출을 나타내는 데 사용한다.

     

    다른 형식은 개별 값을 나타내는 데 사용된다. 이 형식은 함수의 매개 변수와 함수 반환 값에 사용된다.

     

    함수 호출의 XML 형식은 ActionScript에서 송수신되는 호출에 사용된다. ActionScript에서 함수를 호출하는 경우에는 Flash Player가 XML을 컨테이너에 전달하고, 컨테이너에서 호출하는 경우에는 Flash Player에서 컨테이너 응용 프로그램이 이 형식으로 XML 문자열을 전달해야 한다. 다음 XML 프래그먼트는 XML형식의 함수 호출을 보여 준다.

     

    <invoke name="functionName" returntype="xml">
        <arguments>
            … (individual argument values)
        </arguments>
    </invoke>

     

    루트 노드는 invoke 노드이다. 이 노드에는 호출할 함수 이름을 나타내는 name과 항상 xml인 retuntype의 두 가지 특성이 있다. 함수 호출에 매개 변수가 포함되는 경우 invoke 노드에 arguments노드가 포함되고 그 노드의 자식 노드는 아래 설명하는 개별 값 형식의 매개 변수 값이 된다.

     

    함수 매개 변수와 함수 반환 값 등의 개별 값은 실제 값뿐 아니라 데이터 형식 정보가 포함된 형식 지정 스키마를 사용한다. 다음 표에는 ActionScript클래스 및 해당 데이터 유형의 값을 인코딩하는데 사용되는 XML 형식이 나와있다.

     

    ActionScript 클래스/값 C# 클래스/값 형식 설명
    null null <null/>  
    Boolean true bool true <true/>  
    Boolean false bool fasle <false/>  
    String string <string>문자열 값</string>  
    Number, int, uint single, double, int, uint <number>27.5</number>
    <number>-12</number>
     
    Array
    (요소는 혼합 유형일 수 있다.)
    ArrayList 또는 object[] 등 혼합 유형 요소를 허용하는 컬렉션 <arry>
    <property id = "0">
    <number>27.5</number>
    </property>
    <propery id = "1">
    <string>Hello there!</string>
    </property>
    ...
    </arry>
    Property 노드는 개별 요소를 정의하고 ID 특성은 숫자 0부터 시작하는 인덱스이다.
    Object 문자열 키가 있는 HashTable 처럼 문자열 키와 객체 값이 있는 사전 <object>
    <property id="name">
    <string>John Doe</string>
    </property>
    <property id="age">
    <string>33</string>
    </property>
    ...
    </object>
    Property 노드는 개별 속성을 정의하고 ID 특성은 속성 이름(문자열)이다.
    기타 기본 제공 또는 사용자 정의 클래스   <null/> 

    or

    <object></object>
    - ActionScript에서는 다른 객체를 null또는 빈 객체로 인코딩 한다.
    - 두 경우 모두 속성 값이 사라진다.
     

     

     

    QT ActiveX 컨트롤 to Adode flash

    • ActionScript함수가 ExternalInterface.addCallback("myFunction", callMe); 사전에 등록되어 있어야 한다.
    • .pro 에 axcontainer 등록

    QT += axcontainer \

     

    • 헤더 파일에 include

    #include <QAxWidget>

     

    • {D27CDB6E-AE6D-11CF-96B8-444553540000} : Shockwave Flash Object 등록
    • connect 는 dynamicCall 사용시 발생되는 예외처리를 위해 등록
    • LoadMovie함수(flash)를 통해 .swf 파일 로드
    • CallFunction 함수를 통해 xml 형식으로 ActionScript함수 호출

     

     

    • ActiveX 컨트롤 기반의 flash 사용이므로 window OS환경에서만 사용이 가능한 코드이다.

     

     

     

     

    728x90
    반응형

    'Platform > QT' 카테고리의 다른 글

    QT TCP/IP Client 프로그램  (2) 2016.09.26
    QT 기초 (Qt 특징/ Qt 설치/hello Qt)  (0) 2016.09.26
    QT 함수 포인터  (0) 2016.09.26
    [QT/C++] Static 멤버 함수 사용법  (0) 2016.09.22
    Qt (컴파일러 버전설정/consol 출력 설정)  (0) 2016.09.22
상단으로