在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;
}
诸位,如何解决?
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;
}
诸位,如何解决?
解决方案 »
- 泛型函数简易但难度极高的错误修改(简短程序代码,考验细心度)
- 如何修改 AVI 的文件信息?
- 如何获取枚举所有用户注册表值
- 新手求助...
- CString GetPhrase() const { return m_phrase; }
- 一颗红星,两手散分
- 改变文档的默认行为。
- 我怎样实现数据库中数据的同步?如,表1中有字段A、B、C、D,在表2中有C、D、E、F,我在表1中改变了C、D的值,怎样实现表2中的字段C、D值
- 这个简单的错误如何解决?
- 用那个函数计算一个类或者一个变量所占的字节最好?
- 怎么在richedit里插入图片,像QQ一样的?急阿
- 有关点击模式对话框"X"却关闭了的问题,诚恳指教!!
看mfc的原吗:
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal? CDataExchange dx(this, bSaveAndValidate);.....
}