先把关键代码贴了
// CCollectionDlg.h 对话框
static DWORD WINAPI ThreadRead(LPVOID lpParameter);//线程函数CCollectionDlg.cpp
DWORD WINAPI CCollectionDlg:: ThreadRead(LPVOID lpParameter)
{
///////////////
.............
//////////////
UpdateData(false);
//其中有一句是UpdateData(false);作用是将变量的值显示到控件上}报错如下
CollectionDlg.obj : error LNK2019: 无法解析的外部符号 "public: static int __cdecl CWnd::UpdateData(int)" (?UpdateData@CWnd@@SAHH@Z),该符号在函数 "public: void __thiscall CCollectionDlg::OnBnClickedModify(void)" (?OnBnClickedModify@CCollectionDlg@@QAEXXZ) 中被引用
1>FindBook.obj : error LNK2001: 无法解析的外部符号 "public: static int __cdecl CWnd::UpdateData(int)" (?UpdateData@CWnd@@SAHH@Z)
1>ManageShelf.obj : error LNK2001: 无法解析的外部符号 "public: static int __cdecl CWnd::UpdateData(int)" (?UpdateData@CWnd@@SAHH@Z)
1>D:\RFID\Lib\Debug\Lib.exe : fatal error LNK1120: 1 个无法解析的外部命令
我把UpdateData(false);注释掉的话,其他对话框中的UpdateData(false);还是会报错大家看看

解决方案 »

  1.   

    线程内不能用这些MFC的
    用PostMessage发到主线程干这事吧,我也刚学线程遇到过同样的问题
      

  2.   

    LS的你的意思是不能用updatedata?
    用PostMessage怎么做啊
      

  3.   

    线程函数一般是全局函数或者是类的静态成员函数,当然不能直接调用类的普通成员函数了。
    你可以PostMessage/SendMessage()一个自定义的消息到UI线程中,在UI线程的自定义消息响应函数中去更新控件的信息。
      

  4.   

    问题还没解决呢
    sendmessage算是搞懂了,但是我把新加的线程都注释掉后,想还原到没加多线程的样子,按理说不应该出错。但是现在报错如下:搞不懂为什么别的对话框中调用的UpdateData还会报错呢
    1>CollectionDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int __cdecl CWnd::UpdateData(int)" (?UpdateData@CWnd@@SAHH@Z)
    1>FindBook.obj : error LNK2001: 无法解析的外部符号 "public: static int __cdecl CWnd::UpdateData(int)" (?UpdateData@CWnd@@SAHH@Z)
    1>ManageShelf.obj : error LNK2001: 无法解析的外部符号 "public: static int __cdecl CWnd::UpdateData(int)" (?UpdateData@CWnd@@SAHH@Z)
      

  5.   

    关键是另外的对话框中有调用UpdateData的就报错,这让我搞不懂啊.
      

  6.   

    在线程内 不能直接那么用  因为线程是静态函数... UpdateData是成员函数... 要用的话 可以把类传到线程类 在调用....
      

  7.   

    LS的,现在我知道线程中不能直接调用UpdateData。但是我把线程函数都删掉了,把线程函数里的东西放回原来的地方,就是不用多线程了。结果还是报5楼的错
      

  8.   

    MFC界面有自己的界面线程,PostMessage让它自己的线程去做自己的事情!!
    不要在其他线程去做更新界面的事情!!
      

  9.   

    问题更新,现在我把工程拷到别人的机器上把debug文件夹删掉就能编译通过,但是在我自己的机器上把debug文件夹删掉缺不行
      

  10.   

    解决了,不知道为什么我电脑中的afxwin.h中的UpdateData变成static类型了。
    谢谢帮忙解答的各位,结贴了