Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Указатель на функцию


Автор: iglaweb 17.9.2009, 19:37
Возникает ошибка:
Код

typedef DWORD(*func_t)(LPVOID);
func_t t = &Connect;

Функция Connect:
Код

DWORD WINAPI Connect(LPVOID lpParameter)
{
 //...
}

Как вызвать функцию потом, имея только указатель на нее?

Автор: zim22 17.9.2009, 19:41
Цитата(iglaweb @  17.9.2009,  19:37 Найти цитируемый пост)
Как вызвать функцию потом, имея только указатель на нее?

Код

t(аргумент);

Автор: iglaweb 17.9.2009, 19:45
А в строчке
Код

func_t t = &Connect;

что неправильно делаю?

Автор: zim22 17.9.2009, 19:49
Цитата(iglaweb @  17.9.2009,  19:45 Найти цитируемый пост)
что неправильно делаю?

ничего. всё правильно. а что ты хотел сделать этой строчкой? smile

Автор: iglaweb 17.9.2009, 19:53
Хотел создать указатель на функцию Connect. Неправильно?

Автор: zim22 17.9.2009, 19:55
Цитата(iglaweb @  17.9.2009,  19:53 Найти цитируемый пост)
Неправильно?

тип вызова нужно передать ещё было.
Код

typedef DWORD (WINAPI *func_t)(LPVOID);
func_t t = &Connect;


Автор: iglaweb 17.9.2009, 20:00
Ошибка почему-то вываливается, но не на этапе компиляции, а после. У меня проект на формах. Поэтому жму на кнопку и отладчик через этот код не проходит и ошибка(

Автор: Anikmar 17.9.2009, 21:32
Цитата(zim22 @  17.9.2009,  19:55 Найти цитируемый пост)
func_t t = &Connect;

А зачем там амперсенд?

Автор: TiKKi 18.9.2009, 02:03
Цитата(Anikmar @ 18.9.2009,  04:32)
Цитата(zim22 @  17.9.2009,  19:55 Найти цитируемый пост)
func_t t = &Connect;

А зачем там амперсенд?

Как с ним (амперсандом), так и без него - правильно.

Автор: zim22 18.9.2009, 09:31
Цитата(Anikmar @  17.9.2009,  21:32 Найти цитируемый пост)
А зачем там амперсенд?

чтобы явно(человеку) увидеть, что берётся адрес функции.

Автор: Anikmar 18.9.2009, 10:41
Цитата(zim22 @  18.9.2009,  09:31 Найти цитируемый пост)
чтобы явно(человеку) увидеть, что берётся адрес функции. 

Ясно.
Никогда просто не использовал и у меня закралось сомнение - а вдруг тут какой-то особый фокус. Обычно всякие тонкости синтаксиса замечаешь когда что-то не работает. А когда работает - как-то и не обращаешь внимание. Как засело в голове, что функции и массивы амперсенда не требуют, вот и удивился увидев. 

Автор: bsa 18.9.2009, 18:57
iglaweb, код функции, где это происходит, в студию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)