crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
blondinka
  опции профиля:
сообщение 12.10.2009, 12:01
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Привет! Ребята, не подскажите , как сделать callBack в com?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 12.10.2009, 16:52
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Ну хоть кто-нибудь знает, как обернуть сигналы, чтобы к ним был доступ без средств qt?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.10.2009, 17:04
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


а подробнее можно?

указатель на функцию можно использовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 12.10.2009, 17:27
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


А к какому объекту обращаться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.10.2009, 17:46
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 12.10.2009, 18:27) *
А к какому объекту обращаться?

typedef int (AClass::*CallBackPtr)(int data); // теперь CallBackPtr это указатель на метод класса AClass
CallBackPtr fptr = AClass::&method;//инициализация переменной
AClass cl;
int res = (cl.*fptr)(10);//вызов

вот исходя из этого действовать.
почитай про коллбэки может что новое вычитаешь.

Сообщение отредактировал kwisp - 12.10.2009, 17:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 12.10.2009, 18:19
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


AClass, я так понимаю, это класс-клиент.
так из Com-сервера я его определения не увижу...Т.е. компилятор не пойиет что за AClass...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.10.2009, 18:45
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 12.10.2009, 19:19) *
AClass, я так понимаю, это класс-клиент.

я всегда думал что тот объект чьи методы вызываются сторонним объектом -- объект сервер. т.е. к нему обращаются.
соответственно кто вызывает это клиент(он пользует).

получается AClass это сервер. к нему обращаемся.


если не видишь класс метод которого нужно вызвать то дело сложнее.

а "кодовый" не могли бы представить?


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 12.10.2009, 18:47
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Обратиться к серверу можно и без callBack'a
Как из сервера обратиться к клиенту, получив от него только адрес его(клиентской) функции? Сначала -да, клиент обращается к северу с запросом каким-то там (это я воплотила:)), а вот потом сервер должен отдать клиенту информацию.

Сообщение отредактировал blondinka - 12.10.2009, 18:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.10.2009, 18:57
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


в какой то форме тебе нужен по-любому указатель на объект чей метод ты вызываешь.
либо это будет виртуальный метод и тебе хватит базового класса, либо сам объект.



тяжело без кода думать. вернуть информацию в клиент можно к примеру с помощью return.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 12.10.2009, 18:59
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Нельзя, потому что информация, в свою очередь, приходит из сокета.
А кода нет... Я поэтому и спрашиваю- как это сделать-как принять этот адрес и как по нему обратиться:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.10.2009, 19:04
Сообщение #11


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 12.10.2009, 19:59) *
как это сделать-как принять этот адрес и как по нему обратиться:)

передать в функцию сервера аргументом указатель на объект(клиент).

по-моему без кода советчик может навредить равновероятно как и помочь.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 12.10.2009, 21:16
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Ну передать я смогу,а как принять и запомнить? т.е. получить доступ к этому объекту из другого метода этого класса(сервера)
Ну какой код могу привести,если его нет. Едиственное могу привести код того класса, который нужно "обернуть" в com. НО толку от этого не будет никакого. Тем более, что я пишу сервер, соответсвенно клиента нет и в помине.

Сообщение отредактировал blondinka - 12.10.2009, 21:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 7:58
Сообщение #13


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


слушай а если всё это это прочитать.
столько интересного. я осилил только оглавление :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 9:30
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Т.е как обернуть сигнал никто не знает..Просто не понятно одно, если есть средства в Qt для создания самого Com, то и должны быть средства для представления этих их сигналов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 10:35
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 13.10.2009, 10:30) *
Просто не понятно одно, если есть средства в Qt для создания самого Com, то и должны быть средства для представления этих их сигналов.

не понятно о чём ты. :(

есть догадка что ты хочешь вызвать сигнал объекта Qt обернутого в COM.
если так то как и обычно т.к. сигналы в защищенной секции то для вызова сигнала из вне нужно в классе содержащем сигнал написать доступную функцию которая вызовет сигнал
public:
void callMe()
{
emit sgCall();
}

можно попробовать получить адресс самого сигнала(не пробовал не уверен) &sgCall; если сигналы имеют одинаковую сигнатуру пердают одни и теже аргументы, то можно их адреса засунуть в массив. Из вне можно вызывать функцию вида callMe()
signals:
void sg_0(const char*);
void sg_1(const char*);
void sg_2(const char*);
void sg_3(const char*);

private:
typedef void (ComObject::*SGPointer)(const char*);
static const SGPointer CallSG(const uint index) {
        static const SGPointer CallSGHandlers[] = {
            (SGPointer)&ComObject::sg_0,
            (SGPointer)&ComObject::sg_1,
            (SGPointer)&ComObject::sg_2,
            (SGPointer)&ComObject::sg_3
        };
        return index>ARSIZE(CallSGHandlers)?NULL:CallSGHandlers[index];
    }

public:
void callMe(const uint indexSg, const char* data)
{
     SGPointer pointer = CallSG(indexSg);
     if(pointer) { emit (this->*pointer)(data); }//??? это полёт фантазии в этом не уверен.
}

вызываешь callMe(...) COM внутри него вызываются сигналы.
если не получится получить и корректно использовать указатель на сигналы в конце концов можно использовать стандартный switch().
сам так делать не пробовал.

можно посмотреть QAxObject и прочие классы.
документацию конкретного COM объекта можно получить с помощью generateDocumentation ()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 10:45
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Именно про эти классы я и говорила..Но документации на русском нет, поэтому сложно понять, что к чему там относится,а примеры даны элементарные и не подходят.
Я не знаю можно ли поймать qt-шные сигналы,напрмер, в делфи. А сигналы мне вызывать не нужно, нужно поймать его из класса-клиента, в тот момент, когда событие в com-объекте произойдет(придут данные из сокета).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 11:20
Сообщение #17


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 13.10.2009, 11:45) *
Я не знаю можно ли поймать qt-шные сигналы,напрмер, в делфи.

а сразу нельзя было это написать:)


посылать события, можно поробовать.



а может qt за тебя будет это делать
вот
тебе надо искать что такое ActiveX event и как им пользоваться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 12:14
Сообщение #18


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Спасибо, попробую высылать события
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 12:37
Сообщение #19


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 13.10.2009, 13:14) *
попробую высылать события

вполне возможно тебе их надо не высылать а просто ловить.
думаю они автоматом генерируются из сигналов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 12:43
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


т.к. я пишу сервер, вместо сигналов думала выслать события, но не получится, т.к все равно нужно указать получателя.
А как их будут ловить на клиенте тож не понятно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 13:04
Сообщение #21


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


см. выше
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 13:08
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


И что?))
Генерируются они с каким типом??))
Или это к тому,что мне в сервере нужно их ловить?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 13:14
Сообщение #23


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


еще раз повторюсь.
думаю Qt автоматически преобразует сигналы в события.
и тебе надо их ловить.вот.
если в твоем делфи есть что нить типа
QApplication::event(QEvent*)
QApplication::eventFilter(QObject*,QEvent*)

то можно написать не большое тестовое приложение с СОМ объектом (обернутым классом Qt в COM с помощью QAx...) который к примеру по таймеру посылает сигнал.
а в клиентской части посмотреть что за собыия приходят вывести в лог и посомотреть что да как.
или сигнал посылать по нажатию кнопки.
короче как то так.



Цитата(blondinka @ 13.10.2009, 14:08) *
Генерируются они с каким типом??))

ктож тебе скажет,
я хрустальный шар дома сегодня оставил,
а волшебное зеркало девушке подарил:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 13:37
Сообщение #24


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  



Я это поняла с первого раза. Но я про это вскользь упомянула..я написала маленькое приложение, прада, на qt, но для com'a нет разницы.. Вот это приложение не ловит эти события вот таким методом
QApplication::eventFilter(QObject*,QEvent*)
Вот этим ловит
QApplication::event(QEvent*), но ловит все события абсолютно не зависимо от кого они пришли.. А вывести тип события тоженичего не дает,т.к тип события, сгенерированного из сигнала, я не знаю.

Мне их ловить не надо..Мне нужно позаботиться о том,что человек,что будет писать клиента на делфи, смог их словить!

Дело так обстоит: у меня есть qt-класс, написанный мной. Его мне нужно обернуть в Com и именно он высылает сигналы.
Клиент, который будет написан на Делфи (не мной), должен их поймать..так что не поняла, зачем мне писать еще и тестовый com, если есть реальный.
Я написала тестовое клиентское приложение, которое ловит события, сгенерированные из сигналов.

Сообщение отредактировал blondinka - 13.10.2009, 13:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 13:38
Сообщение #25


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(blondinka @ 13.10.2009, 14:21) *
QApplication::event(QEvent*), но ловит все события абсолютно не зависимо от кого они пришли.. А вывести тип события тоженичего не дает,т.к тип события, сгенерированного из сигнала, я не знаю.

так выведи типы и инфу по событиям из нескольких сигналов и посмотри что приходит!!!
передай в сигнале параметры различные и посмотри что приходит.
думаю qt приложение как клиент не годится(т.к. тут можно напрямую соединить нет нужды в событиях и qt по просту может не ловить их(могу ошибаться)) раз уж события будут ловить делфи , надо в делфи и смотреть!

именно в делфи посмотреть как они приходят(я тамошних механизмов не знаю)
даже думаю обязательно именно там и посмотреть.
или в другом языке, набери в гугле "обработка событий ActiveX компонента" и почитай.
как и что там обрабатывается.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 13:40
Сообщение #26


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Дело так обстоит: у меня есть qt-класс, написанный мной. Его мне нужно обернуть в Com и именно он высылает сигналы. Он будет Com -cервером
А ловить будет сигналы будет клиент.Он не будет написан на qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 13:42
Сообщение #27


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


тыж должна оставить хоть какуюто спецификацию приходящих событий.
не скажешь человеку который будет писать на делфи "придут какие то события"
надо определено сказать какие события придут.
для этого надо протестить к примеру так как я сказал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 13:43
Сообщение #28


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Конечно,я ее составлю, когда сама буду знать во что генерируются эти сигналы..Про пример,я уже писала..Может просто объясняю непонятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 13:52
Сообщение #29


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


ладно по следняя попытка.
к примру в делфях есть обработчик событий в него приходят события которые имеют ТИП , ДАННЫЕ, еще какие то поля.

в клиенте написанном на делфи выведи в лог для любого события ТИП и ДАННЫЕ, и определишь соответствие "сигнал Qt - событие COM в делфи."
вот моё предложение.
что не понятно?



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
blondinka
  опции профиля:
сообщение 13.10.2009, 14:01
Сообщение #30


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 8.4.2008
Из: Питер
Пользователь №: 144

Спасибо сказали: 0 раз(а)




Репутация:   3  


Да все понятно. Уже давно ответила))НЕ прокатывает)


У меня нет клиента на делфи ,потому что делфи я не знаю. Сделала Qt-клиент, который ловит эти события.
Да эти события, которые генериуются от сигналов, не ловятся в qt-клиенте даже.

В любом случае спасибо:)

Сообщение отредактировал blondinka - 13.10.2009, 14:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.10.2009, 15:04
Сообщение #31


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


жаль в делфи не шарю.
напиши на чем сможешь на MFC к примеру.

П.С.
не за что.
лучше спасибо будет когда все заработает похвастаешься в эту тему:)

Сообщение отредактировал kwisp - 13.10.2009, 15:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 26.6.2025, 8:49