컨테이너는 함수에 있는 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 형식 문자열로 직렬화되어 전달된다.
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또는 빈 객체로 인코딩 한다. - 두 경우 모두 속성 값이 사라진다. |
ExternalInterface.addCallback("myFunction", callMe);
사전에 등록되어 있어야 한다.axcontainer
등록QT += axcontainer \
#include <QAxWidget>
LoadMovie
함수(flash)를 통해 .swf 파일 로드
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 |