2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 22:45 
Заслуженный участник


28/04/09
1933
Возможно, в консольном варианте необходимо завести цикл обработки сообщений (если его там по каким-то причинам нет). Ошибка может быть в этом, хотя (на данном этапе) это напоминает гадание на кофейной гуще.

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:04 
Заблокирован


16/06/09

1547
цикл обработки сообщений?
EtCetera в сообщении #650705 писал(а):
Ошибка может быть в этом, хотя (на данном этапе) это напоминает гадание на кофейной гуще.
на самом деле всё очень просто. Надо выполнить одну единственную строчку:

Используется синтаксис C++
hr = lpConPoint->Advise(this, &dwConPointID);

в Console Application. Но просто так вам это не удастся. Во-первых, указатель this требует создания класса для него, т.к. в консольных статиках он просто не работает. Его там нет. Во-вторых, этот класс должен обладать некоторыми свойствами... методами.. и понеслось... В-третьих, проинициализировать интерфейсы и библиотеки, вызвать методы...
В результате одна вшивая строчка превращается в целый снежный ком всякого бреда, далеко не нужного.

В любом случае спасибо за помощь!

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:21 
Заслуженный участник


28/04/09
1933
Это я уже понял. :-) Хотя обороты вроде
temp03 в сообщении #650718 писал(а):
указатель this требует создания класса для него, т.к. в консольных статиках он просто не работает
меня по-прежнему пугают. Вы хотите сказать, что в оконном варианте приложения этот самый this указывает не на объект класса MyIDispatch, а на объект какого-то другого класса? Если да, то на какой? И, кстати, что же все-таки кроется под термином "консольные статики"?
temp03 в сообщении #650718 писал(а):
проинициализировать интерфейсы и библиотеки, вызвать методы
А в оконном варианте этого делать не нужно?
EtCetera в сообщении #650740 писал(а):
В результате одна вшивая строчка превращается в целый снежный ком всякого бреда, далеко не нужного.
Так, может быть, "всякий бред" только кажется не нужным, и стоит обратить на него (точнее, на его реализацию) более пристальное внимание?

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:23 
Заблокирован


16/06/09

1547
EtCetera, да ладно! Уж простите мой жаргончик :lol: :oops:

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:25 
Заслуженный участник


28/04/09
1933
temp03 в сообщении #650742 писал(а):
Уж простите мой жаргончик :lol: :oops:
Не прощу, поскольку просто его не понимаю. :-(

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:25 
Заблокирован


16/06/09

1547
EtCetera в сообщении #650740 писал(а):
А в оконном варианте этого делать не нужно?
дык.. понимаете в чём фишка? Консоль - она на то и консоль, чтобы в ней всё было просто па-деццки. Ан-нет... оказалось. Надо с точностью до замены слова WinMain() на main() делать полный дубль: классы, функции, методы, как будто это не консоль.
+ не работает

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:30 
Заслуженный участник


28/04/09
1933
И, все-таки,
EtCetera в сообщении #650740 писал(а):
в оконном варианте приложения этот самый this указывает не на объект класса MyIDispatch, а на объект какого-то другого класса? Если да, то на какой?

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:38 
Заблокирован


16/06/09

1547
EtCetera в сообщении #650749 писал(а):
И, все-таки,
EtCetera в сообщении #650740 писал(а):
в оконном варианте приложения этот самый this указывает не на объект класса MyIDispatch, а на объект какого-то другого класса? Если да, то на какой?
вот смотрите. Есть нестатическая функция MyIDispatch::Advise() (иначе this не работает), внутри которой находится наша строчка. Кстати, текст функции почти полностью в моём первом коде. Поскольку this вызывается внутри этой функции, то он автоматически указывает на класс MyIDispatch, с методом которого мы работаем, и никак иначе. Потому что вызвать в консоли нестатическую функцию мы можем только как метод объекта. Соответственно this и является этим объектом.

В оконном - не знаю, но отладка мне показала, что this является parent-объектом по отношению к IDispatch, т.е. содержит его. Выходит, что this - это само приложение. Старше ничего нету

И почему-то в консольном варианте он начинает выдавать ошибку. Поэтому я и спросил в своём первом вопросе: нельзя ли как-то заменить this? Найти альтернативу? Указатель GUID на приложение? Если такое есть - я не знаю. Ведь приложения, по сути, ещё нет.

-- Ср ноя 28, 2012 00:59:40 --

Отладка показала, что разница между this в консольном и оконном варианте заключается в том, что в оконном варианте кроме IDispatch, this ещё содержит:
- указатель окна оконного приложения;
- переменные инициализации;
- прочие переменные, связанные с оконным интерфейсом.

Кстати, в этом может быть ключ к решению проблемы! Попробую их создать искусственно в консоли. Странно, почему он в консольном варианте не содержит переменные инициализации.... может в этом проблема?

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:03 
Заслуженный участник


28/04/09
1933
temp03 в сообщении #650758 писал(а):
В оконном - не знаю
Это как??? Метод, в котором вызывается заветный Advise (в оконном варианте), какому классу принадлежит (подозреваю, что классу главного окна приложения)?
temp03 в сообщении #650758 писал(а):
Кстати, в этом может быть ключ к решению проблемы! Попробую их создать искусственно в консоли.
Нет! Так делать не нужно!

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:12 
Заблокирован


16/06/09

1547
EtCetera в сообщении #650766 писал(а):
(подозреваю, что классу главного окна приложения)?

вот может быть. А как это посмотреть? (условно он принадлежит классу - экземпляру IDispatch), но я не знаю, является ли этот класс, как вы сказали классом главного окна приложения. Это можно как-то посмотреть?

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:15 
Заслуженный участник


28/04/09
1933
temp03 в сообщении #650770 писал(а):
А как это посмотреть?
:shock: В смысле? Как узнать, к какому классу принадлежит метод? Так перед названием метода обычно вот такой значок: ::, а перед ним $\text{---}$ название класса :wink:.

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:16 
Заблокирован


16/06/09

1547
нет, как узнать, какой класс главный у приложения или это неважно? Класс называется так же MyIDispatch и содержит все те же методы, что и в консольном, кроме методов:
- создания окна;
- регистрации окна;
- настройки окна и т.д.
которые в консольном варианте не нужны.

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:17 
Заслуженный участник


28/04/09
1933
temp03 в сообщении #650773 писал(а):
какой класс главный у приложения
Нет такого.
Давайте двигаться по порядку.
EtCetera в сообщении #650766 писал(а):
Метод, в котором вызывается заветный Advise (в оконном варианте), какому классу принадлежит (подозреваю, что классу главного окна приложения)?

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:19 
Заблокирован


16/06/09

1547
дописал сверху

 Профиль  
                  
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:19 
Заслуженный участник


28/04/09
1933
temp03 в сообщении #650773 писал(а):
Класс называется так же и содержит все те же методы, что и в консольном, кроме методов:
- создания окна;
- регистрации окна;
- настройки окна и т.д.
которые в консольном варианте не нужны.
Замечательно. Тогда какой код находится в функции main?

И, кстати, от какого(их) класса(ов) происходит наследование этого класса в оконном и консольном вариантах?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group