Russian Qt Forum
Апрель 29, 2024, 15:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Много вопросов по ActiveQt  (Прочитано 4338 раз)
Zmey
Гость
« : Июль 28, 2006, 20:20 »

Есть класс (например):

Код:
class ForScripting : public QObject
{
Q_OBJECT

protected:
Need* m_pNeed;
QString m_sElementId;
public:
ForScripting(Need* need, const QString& elementId);
virtual ~Switch();

public slots:

QString getNeedName() const;

QString getElementName() const;

Connection* getInConnection();
}


Указатель на объект класса Need используется для конструирования:
Код:
class Need
{
...
}


Слоты класса используют класс:
Код:
class Connection : public QObject
{
Q_OBJECT
protected:
QString mFolderPath;
...

public:
Connection();
Connection(const Connection& connection);
Connection& operator=(const Connection& connection);
virtual ~Connection(){};
public slots:
QString getName() const;
...
}

Теперь задача:
Необходимо чтобы программа могла выполнить VBScript типа такого

Код:
Function jobExecute(ForScripting s)
Dim StrId
StrId = s.getNeedName()
jobArrived = StrId
End Function


то есть, что можно было вызывать слоты класса 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 ? В каких случаях ее вообще нужно использовать?

Кто знает подскажите, пожалуйста, потому что я уже в тупике...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.