Приветствую всех кто меня еще помнит и всех, кто уже не помнит! :) Вот, возник у меня вопрос, над которым я сижу уже третий час... Вот, к примеру, такой кусок кода: typedef void (CALLBACK aNOT) (int* ii); typedef aNOT* P_NOTa; class zzz { public: void CALLBACK zasd (INT *f) { /**/ } // Line X1 }; BOOL aaa(P_NOTa ap) { return TRUE; } void CALLBACK asd (INT *f) // Line X2 { // stuff } void tmpf() { zzz z; aaa(asd); // Line X3 aaa(z.zasd); // Line X4 } На строчке X4 возникает ошибка "error C2664: \'aaa\' : cannot convert parameter 1 from \'void (int *)\' to \'void (__stdcall *)(int *)\'" На строчке X3 ошибки НЕ ВОЗНИКАЕТ! Видимо, проблема в том, что zasd() является функцией-членом? Объявления в строчках
X1 и X2, в принципе, одинаковые. Вопрос: как мне передать в качестве параметра ф
ункцию zasd? Желательно не менять типы в typedef и объявление функции aaa.
Добрый день, baldr! 1. зачем делать указатель на указатель функции? 2. да проблема именно в этом. Указатели на нестатические функции - члены делаются по другому. 3. Обращение к функции - члену делается через :: и кроме того перед ними обязательно надо ставить & - &zzz::zasd 4. делайте более приятные идентификаторы, а to читать западло. Ответ отправлен: 17.10.2004, 16:28 Отправитель: vitya Отвечает Василевский Александр
Здравствуйте, baldr! Ошибка заключается в следующем: Всем функциям-методам неявно передаётся параметр this, указывающий на данные класса. Т.е в Вашей программе функция zasd объявляется так: void CALLBACK zasd ( xxx* this, INT* f ); А функция asd объявляется как её и положено: void CALLBACK asd ( INT *f ); Передать функцию zasd без изменения типа aNOT не удастся. Придётся объявлять функцию zasd статической - но тогда Вы не сможете обратиться к членам класса, либо менять определение aNOT - но тогда Вы не запустите asd. Подумайте, может не следует вызывать и обычные функции и методы класса. PS. Передать метод zasd в функцию aaa мне так и не удалось.
Ответ отправлен: 18.10.2004, 09:41 Отправитель: Василевский Александр
Вопрос № 1964
Добрый день! Как можно реализовать на си имитацию нажатия клавиши, т.е. не послать сообщение конкретному процессу, а съимитировать.(как нажатие CapsLock, тока мне не CapsLock нужен, а вообще)
Доброе время суток, Dmitriy! Если Вы программируете в Windows, то в WinAPI существуют функции: keyb_event для имитации клавиатуры mouse_event для имитации мыши SendInput для имитации клавиатуры и мыши (рекомендует Platform SDK). Попробуйте использовать эти функции.
Ответ отправлен: 18.10.2004, 09:06 Отправитель: Василевский Александр
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.