如何使用在dll中创建的PropertyPage? Sheet 在Exe中。在Release 模式没有问题。在debug中有断言错误//附原码
eslea 2003-05-14 09:27:22 在dll中输出一个函数,定义如下:
CPropertyPage* GetPropertyPage()
{
::AFX_MANAGE_STATE(AfxGetStaticModuleState())
CTestPage *pTestpage=new CTestPage();
//CTestPage 从CPropertyPage派生
return (CPropertyPage*)pTestpage;
}
在EXE中使用:
typedef CPropertyPage* (*GetPage)(CPropertySheet *);
hInst=LoadLibrary("PageInDll.dll");
if (hInst==NULL)
return false;
GetSheet pGetPage=(GetPage)GetProcAddress(hInst,"GetPropertyPage");
if (pSetSheet==NULL)
{
FreeLibrary(hInst);
return false;
}
CPropertyPage* pPage=pGetPage((CPropertySheet*)&sht);
CPropertySheet sht;
sht.AddPage(pPage);
sht.DoMal();
return false;
////////
//断言错误:
#ifdef _DEBUG
CObject* AFX_CDECL AfxStaticDownCast(CRuntimeClass* pClass, CObject* pObject)
{
ASSERT(pObject == NULL || pObject->IsKindOf(pClass)); //报错
return pObject;
}
#endif
//在CPropertySheet的代码处
CPropertyPage* CPropertySheet::GetActivePage() const
{
ASSERT_VALID(this);
CPropertyPage* pPage;
if (m_hWnd != NULL)
pPage = STATIC_DOWNCAST(CPropertyPage,
CWnd::FromHandle((HWND)::SendMessage(m_hWnd, PSM_GETCURRENTPAGEHWND, 0, 0)));//这里报错!!!
else
pPage = GetPage(GetActiveIndex());
return pPage;
}
诸位,如何解决?