2009-02-09 16 views
7

Flex/AS3 için dinamik bir alay çerçevesi geliştiriyorum ve özel/destek türleriyle (örneğin bir sınıf dosyasında {} paketinin dışında bildirilenler) sorun yaşıyorum.AVM2'de özel bir (destek) sınıfı alt sınıflandırma

ABC "dosyamda", örneğini PROTECTED_NAMESPACE sınıfı bayrağıyla ve PRIVATE_NS çoklu ile bildiriyorum. Aynı zamanda alt sınıfın olduğu sınıfla aynı ad alanını vermeyi denedim (örn. PRIVATE_NS ("ContainerClass.as $ 123")).

Hayır yaparsam yapayım, hep loadBytes sonra aşağıdaki hatayı alıyorum: Ben özel sınıfla aynı ApplicationDomain içine oluşturulan bayt kodu yükleme ile denemişlerdir

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

(ı varsayılan olarak bir alt alan adı kullanmayı). Yüklemeden önce bir sınıf takma adını kaydetmeyi bile denedim (gerçi biraz gergindi).

Hiçbir şeyi unutuyor muyum yoksa sadece AVM'nin bir kısıtlaması mı?

Lütfen bunun ActionScript 3.0'da bunun yasal olmadığını bildiğimi unutmayın, bunun AVM'de gerçekten mümkün olup olmadığını arıyorum.

Düzenleme: işin ilgilenenler için bugüne kadar proje asmock ve sourceforge olduğunu.

cevap

0

ernest bu soruna bakmaya geri dönmüş olması, kesinlikle bu soruya cevap verebilir: özel sınıflar sadece ben özel desteği eklemek mümkün olmuştur

onlara yüklenen loaderContext başvurulabilir Arabirimi, yüklü ABC 'dosyasında yeniden üreterek arabirimlerini, ancak özgün özel arabirime geri yüklenemez/geri yüklenemez.

Birden çok arabirimi birleştirmek için özel bir arabirim kullanılabildiğinden, bu benim gereksinimlerim için hala yararlıdır.

1

ABC dosyaları konusunda uzman değilim, ancak bunun AVM2'de mümkün olduğunu düşünmüyorum. Bir süre önce AS3 Eval lib ile birkaç test yaptım ve hepsi başarısız oldu. Dinamik alaycı İlgili

, ben dinamik bir vekil mekanizması soran Adobe bugbase bir sorunu bulundular: Ben ("ContainerClass.as $ 123") PRIVATE_NS ile ne demek emin değilim http://bugs.adobe.com/jira/browse/ASC-3136

+0

Dinamik bir proxy framework geliştirdim ve iyi çalışıyor (paket sınıfları/arayüzler ile). Çerçevenin tek önemli özelliği, 'özel' sınıfların alay edilmesidir (paketin dışında beyan edilmiştir). –

+0

Vay, o zaman gerçekten kontrol etmeliyim! Bunu standart AS3 yetenekleriyle yapmadığınızı mı varsayıyorum? –

+0

Aslında, ben sadece Loader.loadBytes() kullanıyorum.Çalışma zamanında dinamik bir SWF/ABC oluşturma zor bölümdü;) –

1

benim avm2overview.pdf 4.4.1'in okunması, özel ad alanlarının bir ada sahip olmasına izin verilmemesi, dolayısıyla "< sınıf adı> $ < numara>" hata ayıklama çıkışındaki isim alanının sizin rahatlığınız için üretilmesidir. Bu, ad alanı sabit dizinine erişmek için kaynak swf'de aynı abc etiketine abc kesmek zorunda kalacağınızı varsayardım (ve bu bana çok iş gibi geliyor!)

Aslında yapmam Bununla birlikte, bir yükleme swf üretmeyi başardı, bu yüzden bunu bir tuz tohumu ile al.

+0

4.4.1, SİSTEM ad alanlarının boş olduğunu (yani, String, int, vb.), Ancak özel ad alanlarının (yani, çok işlevli bir tür PrivateNs/0x5 olanların hala adları vardır) olduğunu belirtir. .as $ otomatik olarak (özel) çoklu yuva olarak iç içe geçmiş sınıflara ayrılır. –

+0

Ayrıca, çalıştığım çerçeve, bir yükleme swf'si oluşturuyor ve her tür sınıfın oluşturulmasını destekliyor (Vector. dahil). Sadece üzülmeye neden olan "iç içe" sınıflar. Şimdiye kadar çalışma ile ilgileniyorsanız, kaynak http://asmock.sourceforge.net adresinden edinilebilir. –

+0

"Kullanıcı tanımlı ad alanları CONSTANT_Namespace veya CONSTANT_ExplicitNamespace ve boş olmayan bir ad var. Sistem ad boşlukları boş adlar ve bir tane var. diğer türlerden "burada düşündüğüm metin. Bu CONSTANT_PrivateNs bir sistem NS anlamına gelir ve saklanan bir ismi yoktur. –