Название: Много вопросов по ActiveQt Отправлено: Zmey от Июль 28, 2006, 20:20 Есть класс (например):
Код: class ForScripting : public QObject Указатель на объект класса Need используется для конструирования: Код: class Need Слоты класса используют класс: Код: class Connection : public QObject Теперь задача: Необходимо чтобы программа могла выполнить VBScript типа такого Код: Function jobExecute(ForScripting s) то есть, что можно было вызывать слоты класса ForScripting в скрипте. Это все реализовано, но для JavaScript. С помощью QSA все просто: QSInterpreter* interpreter = new QSInterpreter(); interpreter->addTransientObject(forscriptobj); forscriptobj - объект класса ForScripting Для класса Connection наследуемся от QSObjectFactory, создаем объект этого класса наследника (factory) и: interpreter->addObjectFactory( factory ); и в итоге: interpreter->evaluate(код скрипта); С VBScript оказалось сложнее. Решил создать из класса ForScripting COM сервер. В итоге у меня есть много вопросов: 1. Во всех примерах, классы, которые делаются COM сервером, имеют конструктор типа такого Application(QObject *parent = 0); Я так и не разобрался, как же создать объект, если у него конструктор типа ForScripting (Need* need, const QString& elementId); Допустим я добавлю в ForScripting конструктор без параметров. Зарегистрировал сервер. Используем его. Создаем объект: QAxBase* axSwitch = new QAxObject("{C3428B01-5D5B-4c92-BB64-0129B3C39FC3}"); Как теперь передать с объект данные, которые обычно передаются в конструктор? Можно добавить в класс функцию типа void ForScripting::setInitData(Need* need, const QString& elementId); Но как ее теперь вызвать? Как получить интерфейс моего сервера? 2. Чтобы слоты могли оперировать указателями на Connection, необходимо реализовывать этот класс как в примере COM App Example реализованы классы Document и DocumentList? 3. Как реализовывать классы ForScripting и Connection, как в примере Wrapper Example, то есть наследоваться от QAxFactory и переопределять функции QStringList featureList() const QObject *createObject(const QString &key) const QMetaObject *metaObject( const QString &key ) const QUuid classID( const QString &key ) const QUuid interfaceID( const QString &key ) const QUuid eventsID( const QString &key ) const и использовать макрос QAXFACTORY_EXPORT или как в примере COM App Example: в классах пишем макросы: Q_CLASSINFO("ClassID", "{b50a71db-c4a7-4551-8d14-49983566afee}") Q_CLASSINFO("InterfaceID", "{4a427759-16ef-4ed8-be79-59ffe5789042}") Q_CLASSINFO("RegisterObject", "yes") и потом в конце файла макрос: QAXFACTORY_BEGIN("{edd3e836-f537-4c6f-be7d-6014c155cc7a}", "{b7da3de8-83bb-4bbe-9ab7-99a05819e201}") QAXCLASS(ForScripting) QAXTYPE(Connection) QAXFACTORY_END() 4. Надо ли использовать The dumpcpp Tool ? В каких случаях ее вообще нужно использовать? Кто знает подскажите, пожалуйста, потому что я уже в тупике... |