Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как доступится к функциям класса из глобальной функции?

538
29 июля 2007 года
AVDEY
188 / / 17.11.2005
Как доступится к функциям класса из глобальной функции?
Код:
//Допустим есть клас
class MyClass : public CDialog
//В нем есть функции
{
void Read(int f);
DWORD Write(long e);
}
//И есть глобальная функция в не класса
void wait(void*)
{
}

Как мне из wait(void*) вызвать, допустим, Read(int f);
Пробивал так:
 
Код:
void wait(void*)
{
MyClass *m_MyClass=(MyClass *)::AfxGetMainWnd();
m_MyClass->Read(5);
}

При компиляции все нормально а при работе - ошибка, и программа закривается.
Как можно вызвать эту функцию.
4.5K
29 июля 2007 года
e-XperT
127 / / 04.07.2006
Вроде все должно быть нормально. Может ошибка в функции Read или при вызове Wait.
Можно функцию сделать статической и вызывать так: MyClass::Read(5);
3
30 июля 2007 года
Green
4.8K / / 20.01.2000
Цитата: AVDEY
Как доступится к функциям класса из глобальной функции?
Код:
//Допустим есть клас
class MyClass : public CDialog
//В нем есть функции
{
void Read(int f);
DWORD Write(long e);
}
//И есть глобальная функция в не класса
void wait(void*)
{
}

Как мне из wait(void*) вызвать, допустим, Read(int f);
Пробивал так:
 
Код:
void wait(void*)
{
MyClass *m_MyClass=(MyClass *)::AfxGetMainWnd();
m_MyClass->Read(5);
}

При компиляции все нормально а при работе - ошибка, и программа закривается.
Как можно вызвать эту функцию.


Твоя проблема в принудительном приведении типов.
Что возвращает AfxGetMainWnd() ?
Ты уверен, что это значение можно приводить к MyClass* ?

538
30 июля 2007 года
AVDEY
188 / / 17.11.2005
На счет правильности функций, уверен на 100%.
А вот на счет правильности приведения типов, нет.
Функция ::AfxGetMainWnd(); возвращает CWnd а клас class MyClass : public CDialog и CDialog в свою очередь : public CWnd.
Тоесть ели логически подумать, то наверное, я могу вызвать только функции класса CWnd, но не произвольного от него(по чему то не подумал).
Но как тогда в таком случае поступить, как вызвать функцию?
255
30 июля 2007 года
Dart Bobr
1.4K / / 09.04.2004
А почему бы не описать конструктор, инициализирующий твой класс обьектом типа CWnd, после чего не заморачиваться с приведением типов?
538
31 июля 2007 года
AVDEY
188 / / 17.11.2005
А как это сделать?
398
31 июля 2007 года
Alexandoros
630 / / 21.10.2005
1) Ты уверен, что указатель возвращается именно на то, что тебе нужно?
2) Какую именно ошибку и в какой момент вызывает программа?
538
31 июля 2007 года
AVDEY
188 / / 17.11.2005
 
Код:
void wait(void*)
{
MyClass *m_MyClass=(MyClass *)::AfxGetMainWnd();
MessageBox(NULL,"OK_AfxGetMainWnd()",NULL,MB_OK);
m_MyClass->Read(5);
MessageBox(NULL,"OK_m_MyClass->Read(5);",NULL,MB_OK);
}

Первое сообщение появляется, тоесть указатель получили, а вот к второму сообщению программа не доходит, значит проблемма с вызовом функции через ее указатель.
Не помню код ошибки.
255
31 июля 2007 года
Dart Bobr
1.4K / / 09.04.2004
 
Код:
class MyClass : public CDialog
{
MyClass(CWnd * pParent) :
   CDialog(ID, pParent)
{
};
void Read(int f);
DWORD Write(long e);
}

Где ID - айдишка твоего диалога.
И дальше:
 
Код:
MyClass m_MyClass(AfxGetMainWnd());
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог