Конечно, можно дублировать скриптовые модули, по модулю на обьект, но это создает большую нагрузку на приложение и не удобно. Скриптовые классы исключают лишнюю нагрузку, так как все созданные обьекты находятся в одном модуле и используются теже самые id функций, тот же байткод.
Если вы используте сборщик скриптов, используйте asIScriptModule для перечисления зарегестрированных типов.
Как только тип класса известен, вы создаете его экземпляр вызовом фабричной функции, передавая в нее необходимые аргументы, например указатель на класс в приложении, который будет связан с скриптовым классом. Id фабричной функции находится с помощью asIObjectType.
// Получаем объект asIScriptModule *module = engine->GetModule("MyModule"); asIObjectType *type = engine->GetObjectTypeById(module->GetTypeIdByDecl("MyClass")); // Получаем id фабрики из объекта int factoryId = type->GetFactoryIdByDecl("MyClass @MyClass(int)");
Фабричная функция вызывает глобальную функцию и возвращает хэндл на созданный класс.
// Получаем id метода класса int> funcId = type->GetMethodIdByDecl("void method()"); // Подготавливаем контекст для вызова ctx->Prepare(funcId); // Устанавливаем указатель но объект ctx->SetObject(obj); // Запускаем! ctx->Execute();