Тема: Alchemy & C++
Показать сообщение отдельно
Старый 08.08.2012, 17:52
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
мм.. так в примере выше вполне себе используется экземпляр с++ класса Test (переменная t). Вызываются его методы, посмотрите внимательнее. Сложность в том, что нельзя сделать так:
Код:
AS3_Val someMethod2Val = AS3_Function(NULL, t.someMethod2);// ошибка компиляции
и приходится использовать "обертку":
Код AS3:
AS3_Val someMethod2(void *data, AS3_Val args)
{  
  return t.someMethod2(data, args);
}
Создать его (экземпляр) можно и динамически в одной из оберточных функций, почему нет?
Код AS3:
AS3_Val someMethod2(void *data, AS3_Val args)
{  Test t_local;
  return t_local.someMethod2(data, args);
}
Цитата:
что же делать с элементами класса, их методами и алгоритмами?
да все так же как обычно, только чтобы все это достать из флеша надо немного постараться).
Самый простой случай - сделать все поля с++ класса статическими, тогад к ним можно будет обращаться "напрямую", как в примере:
Код:
// class static member thunk
  AS3_Val someMethodVal = AS3_Function(NULL, &(Test::someMethod)); //someMethodVal по-сути указатель на статический метод класса Test
(естественно, создавать экземпляр такого класса не нужно, и обертки не понадобятся).
Ну, а здесь мы привязываем указатели к некоему ActionScript-объекту, с которым можно будет работать из флеша.
Код:
S3_Val result = AS3_Object("someEntry: AS3ValType, someMethod: AS3ValType, someMethod2: AS3ValType",  someEntryVal, someMethodVal, someMethod2Val);


Последний раз редактировалось alexcon314; 08.08.2012 в 18:06.