我在DLL中封装了一个对话框,然后再外面调用时运行到create时会出现“Debug Assertion Failed! ”提示“digcore.cpp文件第73行出错”,不知道为什么?请高人指点!

解决方案 »

  1.   

    需要将主程序的窗口句柄传到DLL中。
      

  2.   

    我用的是:
    BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
    第二个参数是主窗口的指针,我传递过去了。将主程序的窗口句柄传到DLL还需要吗?怎么传?
      

  3.   

    说的不是很详细,digcore.cpp文件第73行出错,到底是什么呢?是一个ASSERT语句吗?如果是的话,你自己分析一下为什么。不过根据我的经验在Dll里面创建窗口的话,最好不要用CWnd*,最好用HWND来做,还有不要在DllMain中来做CreateWindow,不然的话会有问题的。好像MSDN有这方面的详细解释。
      

  4.   

    还有我说的创建对话框的语句是在DLL库中的,出错也是在DLL库中。
      

  5.   

    dlgcore.cpp文件第73行出错是一个Assertion错误,应该是BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );函数的第一个参数的非法,但是我跟踪了id值是正确的。
      

  6.   

    通过DLL的接口函数的参数来传。
      

  7.   

    从Resource.h中看看,是否有相同的ID或值(主程序和DLL)。
      

  8.   

    注意dll中获得的资源是app的还是dll的.
    默认的获得的是app的.
      

  9.   

    dll中获得的资源都是DLL的,但是在DLL与APP中的resource.h文件中我都定义了相同的ID的资源,但是在app中的资源号只有一个数字,其他的没有用。而且我在dll中加了AFX_MANAGE_STATE(AfxGetAppModuleState());
      

  10.   

    BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
    {
    ASSERT(IS_INTRESOURCE(lpszTemplateName) ||
    AfxIsValidString(lpszTemplateName)); m_lpszTemplateName = lpszTemplateName;  // used for help
    if (IS_INTRESOURCE(m_lpszTemplateName) && m_nIDHelp == 0)
    m_nIDHelp = LOWORD((DWORD_PTR)m_lpszTemplateName);#ifdef _DEBUG
    if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
    {
    ASSERT(FALSE);          // invalid dialog template name
    PostNcDestroy();        // cleanup if Create fails too soon
    return FALSE;
    }
    #endif //_DEBUG HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
    HRSRC hResource = ::FindResource(hInst, lpszTemplateName, RT_DIALOG);
    HGLOBAL hTemplate = LoadResource(hInst, hResource);
    BOOL bResult = CreateIndirect(hTemplate, pParentWnd, hInst);
    FreeResource(hTemplate); return bResult;
    }
    是在ASSERT(FALSE);          // invalid dialog template name这行出错的
      

  11.   

    我和你遇到了同样的问题,不过这个资源库DLL用到其他工程中没有错误