При вызове функции-мембера объекта ака WIN32API CALLBACK , первым неявным параметром твоя функция ожидает указатель THIS на твой объект, который (указатель) WIN32API передать не в состоянии - "это раз".
Второе - функция CALLBACK должна отвечать соглашению вызова STDCALL.
[c++] можно ли задвинуть callback-функцию в клас?10.12.08 04:34 [amirul] Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 10.12.08 04:34 Количество правок: 1
Хочу поместить в клас поиск окон при помощи EnumWindows и EnumChildWindows. Потребность в этом вознилка т.к. есть куча вспомогательных переменных (5 штук), которые без использованния класса висят в глобальном определении.
---
Компилятор ругается, мол "error C2276: '&' : illegal operation on bound member function expression".
Можно ли это как-то вылечить?
Похоже эта тема выходит за рамки моего понимания. Отложу вникание до тех пор, как доросту.16.12.08 18:58 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Я кстати привел готовый код. Просто компилируешь, расставляешь брейкпоинты и смотришь как это работает. Там все до примитивности просто, как уже заметил Den
Спасибо, посмотрю.17.12.08 05:42 Автор: Vedrus <Serokhvostov Anton> Статус: Member
При вызове функции-мембера объекта ака WIN32API CALLBACK , первым неявным параметром твоя функция ожидает указатель THIS на твой объект, который (указатель) WIN32API передать не в состоянии - "это раз".
Второе - функция CALLBACK должна отвечать соглашению вызова STDCALL.
Может я и не понял что тебя волнует, но есть обычная техника, которая позволяет подружить калбяки и прочие WINAPI вызовы с так любым сердцу ООП. Можно даже виртуальные функции вызывать:
> Только я то же самое уже написал здесь > http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m= > 152861 :-) Сорри, за плагиат. Не суди строго - человеку с около учёным прошлым избавиться от плагиата - что курильщику брость курить. Вот я до сих пор ни одного и не могу сделать ;-)
Пара экземплов10.12.08 10:31 Автор: Heller <Heller> Статус: Elderman
Это не те коллбэки. Я настаиваю, что в данном случае нужна именно static функция, а не ptr-to-member10.12.08 11:00 Автор: amirul <Serge> Статус: The Elderman
[C++] Если функцию статиком обозвать, то и переменные тоже придётся, а надо чтобы в разных экзмеплярах класса они разные были, поэтому статик не пойдёт.10.12.08 11:55 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Это только для SetTimer и прочих вызовов, которые не позволяют передать opaque указатель нужно городить отдельный огород (в самых запущенных случаях - приходится генерить заглушки для каждого коллбека, чтоб хоть как то их отличать). А в случае EnumWindows - все тривиально.
Если тривиально, то приведённый мной выше код должен...11.12.08 12:20 Автор: Vedrus <Serokhvostov Anton> Статус: Member
> Если тривиально, то приведённый мной выше код должен > работать, а он не работает.
Не должен он работать. Даже если не закапываться в дебри стандартов и несовместимых calling convention-ов, то просто банальная логика должна подсказать, что нестатический метод класса ВСЕГДА вызывается для какого либо объекта. Причем объект этот при вызове метода из внешнего по отношению к классу кода ВСЕГДА указывается ЯВНО. Для какого объекта будет вызываться метод в случае с коллбеком?