2014 dxdy logo

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

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




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

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

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

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

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

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

 
 
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:23 
EtCetera, да ладно! Уж простите мой жаргончик :lol: :oops:

 
 
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:25 
temp03 в сообщении #650742 писал(а):
Уж простите мой жаргончик :lol: :oops:
Не прощу, поскольку просто его не понимаю. :-(

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

 
 
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:30 
И, все-таки,
EtCetera в сообщении #650740 писал(а):
в оконном варианте приложения этот самый this указывает не на объект класса MyIDispatch, а на объект какого-то другого класса? Если да, то на какой?

 
 
 
 Re: Замена указателя this в static функции
Сообщение27.11.2012, 23:38 
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 
temp03 в сообщении #650758 писал(а):
В оконном - не знаю
Это как??? Метод, в котором вызывается заветный Advise (в оконном варианте), какому классу принадлежит (подозреваю, что классу главного окна приложения)?
temp03 в сообщении #650758 писал(а):
Кстати, в этом может быть ключ к решению проблемы! Попробую их создать искусственно в консоли.
Нет! Так делать не нужно!

 
 
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:12 
EtCetera в сообщении #650766 писал(а):
(подозреваю, что классу главного окна приложения)?

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

 
 
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:15 
temp03 в сообщении #650770 писал(а):
А как это посмотреть?
:shock: В смысле? Как узнать, к какому классу принадлежит метод? Так перед названием метода обычно вот такой значок: ::, а перед ним $\text{---}$ название класса :wink:.

 
 
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:16 
нет, как узнать, какой класс главный у приложения или это неважно? Класс называется так же MyIDispatch и содержит все те же методы, что и в консольном, кроме методов:
- создания окна;
- регистрации окна;
- настройки окна и т.д.
которые в консольном варианте не нужны.

 
 
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:17 
temp03 в сообщении #650773 писал(а):
какой класс главный у приложения
Нет такого.
Давайте двигаться по порядку.
EtCetera в сообщении #650766 писал(а):
Метод, в котором вызывается заветный Advise (в оконном варианте), какому классу принадлежит (подозреваю, что классу главного окна приложения)?

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

 
 
 
 Re: Замена указателя this в static функции
Сообщение28.11.2012, 00:19 
temp03 в сообщении #650773 писал(а):
Класс называется так же и содержит все те же методы, что и в консольном, кроме методов:
- создания окна;
- регистрации окна;
- настройки окна и т.д.
которые в консольном варианте не нужны.
Замечательно. Тогда какой код находится в функции main?

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

 
 
 [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group