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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

//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, 19:48   #2
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,323
Репутация: 1438

skype: vvviperrr00
По умолчанию

ох боже...
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 в 19:53.
pproger на форуме   Ответить с цитированием
Старый 24.03.2010, 20:08   #3
michurinec
 
Регистрация: 24.03.2010
Сообщений: 5
Репутация: 10
По умолчанию

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов вложенной функции veter_s_morya PHP 1 12.11.2009 12:33
Вызов функции класса по адресу VintProg Общие вопросы Delphi 9 03.11.2009 06: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


19:07.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.