Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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,333
По умолчанию

ох боже...
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;
}
ты это хотел?

потоки создавать не надо тебе. пусть стороны темной это. страуструпа чтение к светлой стороне лишь ведет
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось 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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



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