我定义了一个结构体,在主程序里面构造了一个结构体的对象,并进行了赋值。
然后我再创建了一个类,在类中通过主程序的指针使用该结构体,现在的问题是:
比如说,我调试的时候看到结构体的值是1,但是我比较时
if(g_mainDlg->m_struMyData->iValue == 1) 却返回false;另外,如果我在创建的类中声明一个结构体的指针,我这样初始化:
m_pstruMyData = &g_mainDlg->m_struMyData;
调试时看见&g_mainDlg->m_struMyData内存地址和m_pstruMyData地址不相等(相差30多个字节),这就导致了在使用m_pstruMyData时的值和g_mainDlg->m_struMyData不一致这是什么问题啊?郁闷死我了~~

解决方案 »

  1.   

    代码太多了,大概意思如下:
    class MainDlg()
    {
        NET_STRU_DATA m_struMyData;    void Dosomething();
    }void MainDlg::Dosomething()
    {
        m_struMyData.iValue = 1;    CMyClass *pMyClass = new CMyClass;
        pMyClass->Func();
    }MainDlg g_MainDlg
    g_MainDlg.Create(.....)    //省略,就是创建对话框class CMyClass()
    {
        ....
        void Func()
        {
            if(g_MainDlg.m_struMyData.iValue == 1)
            {
                ....
            }
        }
    }
      

  2.   

    第二种情况大概是:
    class MainDlg() 

        NET_STRU_DATA m_struMyData;     void Dosomething(); 
    } void MainDlg::Dosomething() 

        m_struMyData.iValue = 1;     CMyClass *pMyClass = new CMyClass; 
        pMyClass->Func(); 
    } MainDlg g_MainDlg 
    g_MainDlg.Create(.....)    //省略,就是创建对话框 class CMyClass() 

        NET_STRU_DATA m_pstruMyData;
        .... 
        void Func() 
        { 
            m_pstruMyData = &g_MainDlg.m_struMyData;    //m_pstruMyData的值是乱码,比m_struMyData的内存地址提前了30多字节
        } 
    }
      

  3.   

    另外补充点:
    除了结构体外,像int,char,CString.....这些使用是正常的
      

  4.   

    按照你的写法g_mainDlg->m_struMyData->iValue
    m_struMyData是一个指针,
    m_pstruMyData = &g_mainDlg->m_struMyData,估计m_pstruMyData这个也是指针,
    那应该这样写m_pstruMyData = g_mainDlg->m_struMyData
      

  5.   


    这里写错了,因为临时打的
    按照你的写法g_mainDlg->m_struMyData->iValue 应该为g_mainDlg->m_struMyData.iValue
      

  6.   

    NET_STRU_DATA 原型.MainDlg g_MainDlg 
    g_MainDlg.Create(.....)    //省略,就是创建对话框 你g_MainDlg到底是对象还是指针? 这段代码你放哪里的? 列出你各个对象所在的内存区域,(堆,栈,还是全局数据区)
      

  7.   


    g_MainDlg是对象。这段代码在DLL的导出函数里,我前面说的所有类都在dll里面。m_开头的是类成员变量,g_开头的是全局变量