多线程不能调用函数的吗?解决方法

多线程不能调用函数的吗?
C/C++ code

我定义了一个对话框程序,加了个线程,可是一些函数调用却编译提示,未定义?这是怎么回事?
怎么解决?

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{

    
    //MessageBox("hello");  认不到
    //ShowHello();   认不到。。。
           AfxMessageBox("hello")  通过
    return 1;

}

void CAaaDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    HANDLE hThread1;
    hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
    CloseHandle(hThread1); //关闭线程句柄
    MessageBox("hello");




}

void CAaaDlg::ShowHello()
{
    MessageBox("hello");

}



------解决方案--------------------
不能这样调用的,ShowHello是CaaDlg的成员函数啊,在外部不可以这么调用。
------解决方案--------------------
Fun1Proc是个全局函数,::MessageBox这样应该就可以,ShowHello就没办法了,要么自定义个消息,在线程函数里SendMessage/PostMessage给主窗口,要么把对话框指针作为线程参数传过去,推荐用前一种方法。
------解决方案--------------------
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
CAaaDlg *pDlg = (CAaaDlg*)lpParameter;
if( pDlg)
{
pDlg->MessageBox("Hello");
//或者::MessageBox(pDlg->m_hWnd,"Hello");
pDlg->ShowHello();
}
//MessageBox("hello"); 认不到
//ShowHello(); 认不到。。。
AfxMessageBox("hello") 通过
return 1;

}

void CAaaDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
HANDLE hThread1;
hThread1 = CreateThread(NULL,0,Fun1Proc,(void*)this,0,NULL);
CloseHandle(hThread1); //关闭线程句柄
MessageBox("hello");

}