在TestDialog.cpp中,代码如下:
...
__declspec( dllexport ) int g_sharedata;//共享数据DLL
UINT MutexThread(LPVOID pParam);
...
UINT MutexThread(LPVOID pParam)
{
HWND  hWnd = (HWND)pParam;
 m_nNum++;/////////////////////////////编译时提示此变量没有声明?????
while(1)
{
CString str; g_sharedata++;
str.Format("Line%d", g_sharedata);
::SetDlgItemText((HWND)pParam, IDC_STA1, str);

str.Format("Num%d", g_sharedata);
::SetDlgItemText((HWND)pParam, IDC_STA4, str);
str.Format("Num%d", g_sharedata);
::SetDlgItemText((HWND)pParam, IDC_STA5, str);
::Sleep(3000);
} return 0;
}上面所注释的变量在TestDialog.h中已经声明了,如下:
class CTestDialog : public CDialog
{
public:
int m_nNum;
...
这到底怎么回事?请高手指教~!

解决方案 »

  1.   

    UINT MutexThread(LPVOID pParam)            <- 注意:线程函数必须是静态函数,因为Windows需要回调用这函数的函数地址,所以不能访问成员变量
    {
    HWND  hWnd = (HWND)pParam;
     m_nNum++;/////////////////////////////编译时提示此变量没有声明?????
    ...
    }成员变量是不能访问了,但全局变量可以访问!
      

  2.   

    提示是这样TestDialog.obj : error LNK2001: unresolved external symbol "int m_nNum" (?m_nNum@@3HA)
      

  3.   

    可是使用全局变量编译时通不过,
    --------------------Configuration: Dialog - Win32 Debug--------------------
    Compiling...
    TestDialog.cpp
    Generating Code...
    Skipping... (no relevant changes detected)
    Dialog.cpp
    DialogDlg.cpp
    Linking...
    TestDialog.obj : error LNK2001: unresolved external symbol "int m_nNum" (?m_nNum@@3HA)
    Debug/Dialog.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    Creating browse info file...Dialog.exe - 2 error(s), 0 warning(s)
      

  4.   

    你的全局变量声明和定义的方法不对吧在global.cpp中
    int g_iValue = 10;
    在global.h中
    extern int g_iValue;在你的.cpp中
    #include "global.h"
    g_iValue = 11;      //这时就可以访问全局变量了,只要包函带导出全局的头文件