为什么在CPropertySheet的构造里调用DLL会报错呢?

ailsa_wjp 2010-04-27 01:48:57
CInfoQuerySheet::CInfoQuerySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
m_psh.dwFlags |= PSH_NOAPPLYNOW; // Lose the Apply Now button
AddPage(&m_Page1);
HINSTANCE hDllInst = ::LoadLibrary("ProQueryRoute.dll");
if(hDllInst)
{
typedef DWORD (WINAPI *MYFUNC)(CInfoQuerySheet*);
MYFUNC MyFuntionNameAlias = NULL;
MyFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,"GetDlgQueryRoute");
if(MyFuntionNameAlias)
{
MyFuntionNameAlias(this);
}

}

ProQueryRoute.dll这个里实际上是又添加了一页。不是DLL本身问题,空函数也是会报错的,是不是加载有问题呢?谢谢诸位了
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ailsa_wjp 2010-04-27
  • 打赏
  • 举报
回复
好了,问题解决,结贴,谢谢诸位!
songtao_01 2010-04-27
  • 打赏
  • 举报
回复
这就是了,这个AddPage要在完全创建成功以后才能用的
ailsa_wjp 2010-04-27
  • 打赏
  • 举报
回复
没有用到窗口句柄的,只用了CPropertySheet中的AddPage函数
songtao_01 2010-04-27
  • 打赏
  • 举报
回复
你把this传进去,就要注意了这个时候还没有窗口,this->m_hWnd是为NULL的,你DLL里面是否用到了窗口句柄这类的东西
ailsa_wjp 2010-04-27
  • 打赏
  • 举报
回复
MyFuntionNameAlias(this)执行完就报错了,跟进DLL中的函数,已经执行完了的,动态库已经加载成功了
尹成 2010-04-27
  • 打赏
  • 举报
回复
在CPropertySheet的构造函数中用
this->AddPage( &m_PropertyPage )

我的代码是:
DLL中
extern "C"__declspec(dllexport) CPropertyPage* Ex22cGetSheet2()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CSheet2* dlg;
dlg = new CSheet2;
ASSERT_KINDOF(CPropertyPage,dlg);
return (CPropertyPage*)dlg;
}

主程序中:
extern "C"__declspec(dllimport) CPropertyPage* Ex22cGetSheet2();

CSheet::CSheet()
:CPropertySheet("系统设置", NULL, 0)
{
AddPage(Ex22cGetSheet2());
}

如果DLL是由DEBUG生成的则主程序不管是DEBUG还是RELEASE都可以正常运行,但如果DLL是由RELEASE生成的则在主程序为DEBUG时出错:
void CPropertySheet::AddPage(CPropertyPage* pPage)
{
ASSERT_VALID(this);
ASSERT(pPage != NULL);
ASSERT_KINDOF(CPropertyPage, pPage);//这里出错
ASSERT_VALID(pPage);

主程序为RELEASE则完全正常.
快乐鹦鹉 2010-04-27
  • 打赏
  • 举报
回复
进行到哪一句有问题呢?MyFuntionNameAlias(this)执行到了吗?动态库加载成功了吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧