7

Flex/AS3 用の動的モッキング フレームワークを開発していますが、プライベート/サポート型 (つまり、クラス ファイル内のパッケージ {} の外側で宣言された型) に問題があります。

私の ABC「ファイル」では、PROTECTED_NAMESPACE クラス フラグと PRIVATE_NS マルチネームを使用してインスタンスを宣言しています。また、サブクラス化するクラスと同じ名前空間を与える実験も行いました (例: PRIVATE_NS("ContainerClass.as$123"))。

何をしても、loadBytes の後に常に次のエラーが発生します。

VerifyError: エラー #1014: クラス ContainerClass.as$123::PrivateClass が見つかりませんでした。

生成されたバイトコードをプライベート クラスと同じ ApplicationDomain にロードして実験しました (デフォルトでは子ドメインを使用します)。ロードの前にクラスエイリアスを登録しようとさえしました(それは少し無理が​​ありましたが)。

私は何かを忘れていますか、それとも単に AVM の制限ですか?

これが ActionScript 3.0 では違法であることは十分承知しており、AVM でこれが実際に可能かどうかを調べています。

編集:これまでの作業に興味がある人のために、プロジェクトはasmockであり、sourceforge にあります。

4

3 に答える 3

1

私は ABC ファイルの専門家ではありませんが、AVM2 でこれが可能だとは思いません。少し前にAS3 Eval ライブラリでいくつかのテストを行いましたが、すべて失敗しました。

動的モッキングに関連して、動的プロキシ メカニズムを求める問題を Adob​​e バグベースに提出しました: http://bugs.adobe.com/jira/browse/ASC-3136

于 2009-02-09T15:01:13.747 に答える
1

PRIVATE_NS("ContainerClass.as$123") の意味がわかりません。 avm2overview.pdf 4.4.1 を読んだところ、プライベート名前空間に名前を付けることが許可されていないため、「<class name>$< number>" デバッグ出力の名前空間は、便宜上生成されます。名前空間定数インデックスにアクセスするには、abc をソース swf の同じ abc タグにハックする必要があることを意味すると思います (そして、それは私には大変な作業のように聞こえます!)

ただし、実際にはローディング SWF を生成することはできていないので、これは考慮してください。

于 2009-03-09T07:18:52.340 に答える
0

Having gone back to look at this problem in ernest, I can definitively answer this question: private classes can only be referenced from the LoaderContext that loaded them

I have been able to add support for private interfaces by reproducing the interface in the loaded ABC 'file', but it cannot be coerced/cast back to the original private interface.

This is still useful for my requirements, as a private interface can be used to combine multiple interfaces.

于 2010-10-22T16:26:20.960 に答える