//Допустим есть клас
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);
}
{
MyClass *m_MyClass=(MyClass *)::AfxGetMainWnd();
m_MyClass->Read(5);
}
При компиляции все нормально а при работе - ошибка, и программа закривается.
Как можно вызвать эту функцию.
Можно функцию сделать статической и вызывать так: MyClass::Read(5);
Цитата: AVDEY
Как доступится к функциям класса из глобальной функции?
Как мне из wait(void*) вызвать, допустим, Read(int f);
Пробивал так:
При компиляции все нормально а при работе - ошибка, и программа закривается.
Как можно вызвать эту функцию.
Код:
//Допустим есть клас
class MyClass : public CDialog
//В нем есть функции
{
void Read(int f);
DWORD Write(long e);
}
//И есть глобальная функция в не класса
void wait(void*)
{
}
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);
}
{
MyClass *m_MyClass=(MyClass *)::AfxGetMainWnd();
m_MyClass->Read(5);
}
При компиляции все нормально а при работе - ошибка, и программа закривается.
Как можно вызвать эту функцию.
Твоя проблема в принудительном приведении типов.
Что возвращает AfxGetMainWnd() ?
Ты уверен, что это значение можно приводить к MyClass* ?
А вот на счет правильности приведения типов, нет.
Функция ::AfxGetMainWnd(); возвращает CWnd а клас class MyClass : public CDialog и CDialog в свою очередь : public CWnd.
Тоесть ели логически подумать, то наверное, я могу вызвать только функции класса CWnd, но не произвольного от него(по чему то не подумал).
Но как тогда в таком случае поступить, как вызвать функцию?
А почему бы не описать конструктор, инициализирующий твой класс обьектом типа CWnd, после чего не заморачиваться с приведением типов?
А как это сделать?
2) Какую именно ошибку и в какой момент вызывает программа?
Код:
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);
}
{
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);
}
Первое сообщение появляется, тоесть указатель получили, а вот к второму сообщению программа не доходит, значит проблемма с вызовом функции через ее указатель.
Не помню код ошибки.
Код:
class MyClass : public CDialog
{
MyClass(CWnd * pParent) :
CDialog(ID, pParent)
{
};
void Read(int f);
DWORD Write(long e);
}
{
MyClass(CWnd * pParent) :
CDialog(ID, pParent)
{
};
void Read(int f);
DWORD Write(long e);
}
Где ID - айдишка твоего диалога.
И дальше:
Код:
MyClass m_MyClass(AfxGetMainWnd());