Как правильно использовать package_as3 в Crossbridge / FlasCC для импорта классов AS3?

У меня есть старый код, который я пытаюсь очистить в проекте, который использует Adobe Crossbridge для управления бэкендом C ++ и внешним интерфейсом AS3. Код не в полной мере использовал возможности взаимодействия, и я пытаюсь работать в этом направлении, но все документы кажутся устаревшими, активных форумов не возникает, и всякий раз, когда я пробую большую часть примеры, похоже, не работают, поэтому я начну с более простых преобразований, чтобы освоиться с ними.

Сейчас я сталкиваюсь с проблемами при использовании package_as3 для импорта классов AS3. Вот слишком упрощенный пример некоторых пространств имен, которые мы имеем:

namespace A
{
inline void func1(int a, int b)
{
inline_nonreentrant_as3("import MyAS3Class;");
inline_nonreentrant_as3("MyAS3Class.func1(%0, %1);" :: "r"(a), "r"(b));
}
inline void func2(int x, int y)
{
inline_nonreentrant_as3("import MyAS3Class;");
inline_nonreentrant_as3("MyAS3Class.func2(%0, %1);" :: "r"(x), "r"(y));
}
}

namespace B
{
inline void func1(int a, int b)
{
inline_nonreentrant_as3("import com.packagename.MyOtherAS3Class;");
inline_nonreentrant_as3("MyOtherAS3Class.func1(%0, %1);" :: "r"(a), "r"(b));
}
inline void func2(int x, int y)
{
inline_nonreentrant_as3("import com.packagename.MyOtherAS3Class;");
inline_nonreentrant_as3("MyOtherAS3Class.func2(%0, %1);" :: "r"(x), "r"(y));
}
}

Этот код работает, но я не уверен, что компилятор может оптимизировать повторяющийся импорт, особенно при последующих вызовах той же функции, но кажется разумным отменить импорт, если только по причинам, отличным от читабельности. Поэтому я попытался сделать это, используя package_as3, вот так:

namespace A
{
package_as3("import MyAS3Class;");

inline void func1(int a, int b)
{
inline_nonreentrant_as3("MyAS3Class.func1(%0, %1);" :: "r"(a), "r"(b));
}
inline void func2(int x, int y)
{
inline_nonreentrant_as3("MyAS3Class.func2(%0, %1);" :: "r"(x), "r"(y));
}
}

namespace B
{
package_as3("import com.packagename.MyOtherAS3Class;");

inline void func1(int a, int b)
{
inline_nonreentrant_as3("MyOtherAS3Class.func1(%0, %1);" :: "r"(a), "r"(b));
}
inline void func2(int x, int y)
{
inline_nonreentrant_as3("MyOtherAS3Class.func2(%0, %1);" :: "r"(x), "r"(y));
}
}

Интересно, что вызов функций в пространстве имен A работает нормально, но вызов функций в пространстве имен B вызывает ошибку ReferenceError во время выполнения.

[Fault] exception, information=ReferenceError: Error #1065: Variable MyOtherAS3Class is not defined.

Как я уже говорил, пример чрезвычайно упрощен, но, насколько я могу судить, единственное реальное различие между ними состоит в том, что один из классов AS3 (MyAS3Class) находится в корне исходного кода проекта, а другой — (MyOtherAS3Class). ) не является. Я попытался использовать полностью определенное имя (то есть com.packagename.MyOtherAS3Class.func1 (…)), помимо прочего, но затем я получил тот же ReferenceError, говоря: «Переменная com не определена». Кто-нибудь знает, что здесь происходит?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]