这里的Class T都是继承自CDialog类
编译可以通过,因为 是DLL。
运行时老报错,debug查出错在这句话:BOOL ok = dlg->CreateIndirect(pTemplate ,wndparent);
调用语句是:
HRESULT r = CreateDllDialog(parent,IDD_EDITOR,&g_Editor);
请高手看看
template<class T> HRESULT CreateDllDialog(HWND parent,UINT resId,T** rdlg) 
{

*rdlg = NULL; DLGTEMPLATE* pTemplate =NULL; HGLOBAL hTemplate = NULL;
{
//Load DLGTEMPLATE
AFX_MANAGE_STATE(AfxGetStaticModuleState());
  HINSTANCE hInst= AfxFindResourceHandle(MAKEINTRESOURCE(resId),RT_DIALOG);

if (hInst == NULL)

TRACE("Could not find resource in resource chain");
ASSERT(FALSE);
return -1;
} HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(resId),RT_DIALOG); ASSERT(hRsrc != NULL);
hTemplate = ::LoadResource(hInst, hRsrc);
ASSERT(hTemplate != NULL);
  pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate);
ASSERT(pTemplate != NULL); } CWnd* wndparent=CWnd::FromHandle(parent);


T* dlg = new T(wndparent);
BOOL ok = dlg->CreateIndirect(pTemplate ,wndparent); {
AFX_MANAGE_STATE(AfxGetStaticModuleState());
::UnlockResource(hTemplate);
::FreeResource(hTemplate);
} if (ok==true)
{
dlg->ModifyStyle(0,WS_CLIPCHILDREN);
*rdlg = dlg; return S_OK;
}

delete dlg;
return -1;
}