将一个对话框资源及文件 从一个工程(正常运行)拷贝到另一个工程,所有变量及资源ID、代码都一样,为什么拷贝后这个对话框的数据交换函数出错?
出错时是调试器显示代码是这样的
HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
TRACE1("Error: no data exchange control with ID 
                                0x%04X.\n", nIDC);
指针在该处 ->      ASSERT(FALSE);
AfxThrowNotSupportedException();
}
m_hWndLastControl = hWndCtrl;
m_bEditLastControl = FALSE; // not an edit item by default
ASSERT(hWndCtrl != NULL);   // never return NULL handle
return hWndCtrl;
}///////////////////
数据交换函数是这样的:
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRunToRepair)
DDX_Control(pDX, IDC_STATIC_QIHUAN, m_a);
DDX_Control(pDX, IDC_STATIC_BEGIN, m_b);
DDX_Control(pDX, IDC_EDIT1, m_c);
DDX_Control(pDX, IDCANCEL, m_d);
DDX_Control(pDX, IDC_BUTTON3, m_e);
DDX_Control(pDX, IDC_BUTTON2, m_f);
DDX_Control(pDX, IDC_BUTTON1, m_g);
DDX_Control(pDX, IDC_COMBO75, m_h);
DDX_CBIndex(pDX, IDC_COMBO75, m_i);
DDX_Text(pDX, IDC_EDIT1, m_j);
DDX_Text(pDX, IDC_EDIT2, m_k);
DDX_Text(pDX, IDC_EDIT3, m_l);
//}}AFX_DATA_MAP
}

解决方案 »

  1.   

    可能是你拷贝以后,把.clw文件给毁坏了!建议你关闭工程,删除工程下的.clw\.opt\.plg\.ncb文件,然后重新开启工程!!rebuild all
      

  2.   

    to  feiniaoliang(飞鸟良) :
    问题依然存在……
      

  3.   

    打开resource.h,看看有没有ID好重复的??
      

  4.   

    to feiniaoliang(飞鸟良) :
    有重复的,可是以前为什么不出问题呢,我还以为可以重复。能在Resource.h里直接改成不重复的吗(随便给个ID号)?
      

  5.   

    在Resource.h里已经没有重复的ID号了也不行。
    如果我把所有的变量都注掉,在调用这个对话框时,弹出的竟然是一个毫不相干的对话框!我晕……
      

  6.   

    to bm1408(VC一线) :
    还是不行……
      

  7.   

    我估计问题出在资源文件.RC里面,选中文件点右键选打开方式,用源代码编辑器打开,问题可能在里面吧,外面的资源跟里面的资源定义不统一,感觉VC.net在界面编辑上面太不友好
      

  8.   

    昏~~~什么代码,要是不大,发给我看看!![email protected]
      

  9.   

    有可能是你的对话框ID重复造成的,你打开Resource.h文件查看一下各个对话框的ID是否重复,将重复的修改一下即可,当然,如果你是使用多个DLL的话,那你就得要查看所有的DLL里面是否有重复的对话框ID了
      

  10.   

    确实是DLL里的对话框ID重复造成的,这是不是VC的一个BUG呢?有什么解决的办法吗(根本上的)