Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 24.03.2010, 18:26   #1
michurinec
 
Регистрация: 24.03.2010
Сообщений: 5
По умолчанию Вызов функции по указанному адресу

Здравствуйте! Очень нужна помощь.
Мне нужно передать в статическую функцию в классе адрес этого класса и из этой функции вызывать нестатичную функцию этого класса по переданному адресу со смещением.

//heder file

class MyClass
{
private:
MyClass(void);
~MyClass(void);
static DWORD WINAPI func1 (LPVOID Arg);
DWORD WINAPI func2 (void);
}



// cpp file

MyClass::MyClass(void)
{
func1(this); // передаю в статичную функцию адрес моего класса
}

MyClass::~MyClass(void)
{
}

DWORD WINAPI func1 (LPVOID Arg)
{
return Arg->func2(); // по идее надо вот так, но выдаёт ошибку
}

DWORD WINAPI func2 (void)
{
........
}


если конкретно то мне надо создать поток как вот тут...
http://msdn.microsoft.com/en-us/library/ms838346.aspx
michurinec вне форума Ответить с цитированием
Старый 24.03.2010, 18:48   #2
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

ох боже...
1. нет точки с запятой после описания класса
2. конструктор защищенный. кто создаст объект этого класса. ладно еще, если это синглтон или базовай класс, чего по данному коду не видно
3. по передаче и вызове метода вообще бред какой то. опять же, пытаешься вызвать защищенный метод (заметь, ПЫТАЕШЬСЯ. через нетипизированный указатель данные передают очень в редких случаях в плюсах. в сях это нормально. я уже молчу о необходимости привидения типа).

Код:
#include <iostream>
#include <windows.h>

using namespace std;

class A {
public:
	A();
	void called();

	static void foo(A *pA);
};

A::A()
{
	foo(this);
}

void A::called()
{
	cout << "A::called()" << endl;
}

void A::foo(A* pA)
{
	pA->called();
}

int main()
{
	A a;	
	return 0;
}
ты это хотел?

потоки создавать не надо тебе. пусть стороны темной это. страуструпа чтение к светлой стороне лишь ведет

Последний раз редактировалось pproger; 24.03.2010 в 18:53.
pproger вне форума Ответить с цитированием
Старый 24.03.2010, 19:08   #3
michurinec
 
Регистрация: 24.03.2010
Сообщений: 5
По умолчанию

О, спасибо тебе, мудрый учитель. Понял ошибку свою я. Надо передавать ни void* а именно свой класс. Сейчас попробую.
На счёт первых двух пунктов- виноват. Просто тут минимум копипаста, в основном в ручную набивал.
А потоки нужны мне. Хочу тёмную сторону познать чтобы бороться с ней.
Да прибудет с вами сила!
michurinec вне форума Ответить с цитированием
Старый 24.03.2010, 19:25   #4
michurinec
 
Регистрация: 24.03.2010
Сообщений: 5
По умолчанию

во... скомпилировалось

только вот здесь

WorkerThreadHandle = CreateThread (
NULL,
0,
(LPTHREAD_START_ROUTINE)func1, // <<<<<<<<<<<<<<<
this,
0,
&WorkerThreadId
);

пришлось принудительно тип изменить.

Спасибо ещё раз!
michurinec вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов вложенной функции veter_s_morya PHP 1 12.11.2009 11:33
Вызов функции класса по адресу VintProg Общие вопросы Delphi 9 03.11.2009 05:17
Вызов функции по событию phobos Общие вопросы .NET 8 26.05.2009 00:06
Вызов функции из dll-ки VVVadim Общие вопросы Delphi 2 28.04.2009 09:37
Вызов функции MarSeON PHP 2 01.08.2008 19:22


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS