2009-02-09 6 views
7

Flex/AS3 용 동적 조롱 프레임 워크를 개발 중이며 개인/지원 유형 (예 : 클래스 파일의 {} 패키지 외부에 선언 된 클래스)에 문제가 있습니다.AVM2의 개인 (지원) 클래스 서브 클래 싱

내 ABC "파일"에서 PROTECTED_NAMESPACE 클래스 플래그 및 PRIVATE_NS 다중 이름을 사용하여 인스턴스를 선언합니다. 또한 서브 클래 싱하는 클래스와 동일한 네임 스페이스를 제공하는 것으로 실험했습니다 (예 : PRIVATE_NS ("ContainerClass.as $ 123")).

상관없이 내가 뭘, 난 항상 같이 loadBytes 후 다음과 같은 오류 얻을 : 나는 개인 클래스와 동일한의 ApplicationDomain에 생성 된 바이트 코드를로드와 함께 실험을

VerifyError: Error #1014: Class ContainerClass.as$123::PrivateClass could not be found.

(나는 기본적으로 하위 도메인을 사용합니다). 나는로드 전에 class alias를 등록하려고 시도했다.

나는 무엇인가를 잊어 버렸습니까? 아니면 단순히 AVM의 제한입니까?

ActionScript 3.0에서는이 방법이 불법이라는 것을 완전히 알고 있습니다. AVM에서 이것이 실제로 가능한지 여부를 찾고 있습니다.

편집 : 작품에 관심있는 사람들을 위해 지금까지,이 프로젝트는 asmock이며, 소스 포지 (SourceForge)에 있습니다.

답변

0

어니스트에서이 문제를보고 다시 사라 데, 나는 확실히이 질문에 대답 할 수 개인 수업 만 나는 개인 에 대한 지원을 추가 할 수 있었다

그들에게로드에는 LoaderContext에서 참조 할 수 있습니다 로드 된 ABC '파일'의 인터페이스를 재현하여 인터페이스에 액세스 할 수 있지만 강제로 원래의 개인 인터페이스로 캐스팅/캐스트 할 수는 없습니다.

개인 인터페이스를 사용하여 여러 인터페이스를 결합 할 수 있으므로 내 요구 사항에 여전히 유용합니다.

1

저는 ABC 파일에 대한 전문가가 아니지만 AVM2에서는 이것이 가능하지 않다고 생각합니다. 얼마 전에 여러 테스트를 수행했는데 모두 실패했습니다. 동적 조롱에 관련

, 나는 동적 프록시 메커니즘을 요청, 어도비 bugbase에 문제를 제기했다 : 나는 당신이 ("ContainerClass.as $ 123") PRIVATE_NS 무슨 뜻인지 모르겠어요 http://bugs.adobe.com/jira/browse/ASC-3136

+0

저는 실제로 동적 프록시 프레임 워크를 개발했으며 잘 작동합니다 (패키지 클래스/인터페이스 사용). 프레임 워크의 유일한 주요 특징은 '패키지'외부에서 선언 된 '개인'클래스 조롱입니다. –

+0

와우, 그 다음 나는 그것을 실제로 확인해야합니다! 표준 AS3 기능을 사용하지 않았다고 가정합니다. –

+0

사실 저는 Loader.loadBytes()를 사용하고 있습니다.런타임에 동적 SWF/ABC 생성은 까다로운 부분이었습니다.) –

1

내를 avm2overview.pdf 4.4.1을 읽으면 개인 네임 스페이스에 이름이 허용되지 않으므로 편의를 위해 "< class name> $ <>"네임 스페이스가 디버그 출력에 생성됩니다. 나는 당신이 네임 스페이스 상수 인덱스에 접근하기 위해 소스 swf에서 abc 태그와 동일한 abc 태그를 해킹해야한다는 것을 의미한다고 생각할 것이다.

나는 실제로 그렇지 않다. 그러나 로딩 swf를 생성 할 수 있었기 때문에 이것을 소금 한 알로 가져 가라.

+0

4.4.1은 SYSTEM 네임 스페이스가 비어 있음을 나타냅니다 (즉, String, int 등). 그러나 private 네임 스페이스 (예 : Multiname 종류의 PrivateNs/0x5가있는 이름)는 여전히 값을가집니다. .as $ 은 중첩 클래스에 (개인) 다중 이름으로 자동 할당됩니다. –

+0

또한 프레임 워크는 로딩 swf를 생성하고 모든 유형의 클래스 (Vector. 포함) 생성을 지원합니다. 나를 슬프게하는 것은 "중첩 된"클래스 일뿐입니다. 지금까지의 작업에 관심이 있다면 http://asmock.sourceforge.net –

+0

"사용자 정의 네임 스페이스는 CONSTANT_Namespace 또는 CONSTANT_ExplicitNamespace와 비어 있지 않은 이름이 있습니다. 시스템 네임 스페이스는 빈 이름과 다른 종류들 "은 제가 여기서 생각하고있는 텍스트입니다. 이것은 CONSTANT_PrivateNs가 시스템 NS이며 저장된 이름이 없음을 의미합니다. –