![]() |
|
![]() ![]() ![]() |
|
black_priest |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 19.3.2007 Где: Minsk Репутация: нет Всего: нет |
Есть такая функция
и есть метод класса
Как передать параметру dwCallback функции указатель на метод класса VJSoundIn ? ![]() |
||||
|
|||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Сделай функцию статической
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
black_priest |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 19.3.2007 Где: Minsk Репутация: нет Всего: нет |
Спасибо, уже сделал, действительно помогает (во всяком случае скомпилировалось
![]() Сразу возник попутный вопрос. В определении класса (VJSoundIn.h):
В определнии метода класса (VJSoundIn.cpp)
При компиляции дает ошибку error C2724: 'VJSoundIn::DataBufferReady' : 'static' should not be used on member functions defined at file scope Если определить метод без слова static, т.е. так
то компилируется без ошибок. Поясните пожалуйста, почему? (строку перевел, смысл все равно не понятен) |
||||||
|
|||||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Потому что обозвав функцию статической в файле реализации ты запретил её видимость для других модулей. Решение, как ты заметил, не обзывать её статической. -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
black_priest |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 19.3.2007 Где: Minsk Репутация: нет Всего: нет |
Смутило просто то, что в одном месте надо писать, а в другом уже не надо. Ведь по логике должно быть так, что ты посмотрел на функцию и можешь понять что она в общем из себя представляет, а так получается информацию о том, что функция статическая можно получить только из заголовочного файла.
А CALLBACK, зараза, все равно не заработал. Есть серьезные подозрения, что причина в том, что приложение консольное. Может есть какие то тонкости при использовании CALLBACK механизмов в консольных приложениях? BorisVorontsov, спасибо за поддержку ![]() |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Смотрим
Есть серьезные предположение,что функцию нельзя импортировать в консольных придожениях? ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Т.е. выразился неправильно
![]() __stdcall это convention-т.е согласование о вызове функции. 99% АПИ функций - __stdcall Т.е. параметры передаются справа на лево для стека и т.д и т.п. А то,что ты передаешь имя функции,так жто для того,что б вызвать в дебрях той функции,в которую ты передаешь твою калбек. Так что никакого механизма особого нет ![]() ![]() ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
black_priest |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 19.3.2007 Где: Minsk Репутация: нет Всего: нет |
Спасиб ребята, все заработало. Все таки моя ошибка была по невнимательности, когда waveInOpen делал, параметры попутал. Так что никаких проблем с __stdcall действительно нет.
Единственно теперь то, что смущает это фраза из MSDN в описании wsweInProc:
Поэтому решил все-таки общаться с драйвером путем сообщений, т.е. вместо вызова CALLBACK функции, настроится на прием сообщений (что в принципе работало в моей программе с GUI, написанной ранее на дельфи). Но возникает сложность, как можно принимать сообщения, если приложение консольное, т.е. не имеет окна, и соотв. оконной процедуры. Погуглив немного этот вопрос, нашел, что часто рекомендуют создавать невидимые message only окна и работать с ними. Мне это решение как-то не очень понравилось. Может есть что-то другое? |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
black_priest, общаться через сообщения рекомендую только в СВОИХ окнах.Всякие невидимые окна,броадкасты и прочие "костыли" не привествую.
Предлагаю обыкновенное межпроцессорное взаимодействие 1.Pipe хорошая штука.Но есть свои нюансы.Отложим 2.Обьекты синхронизации+ FileMapping /Хорошая вещь.Я через сервис общался со своим приложением ![]() Рекомендую ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |