在主程序中显示dll对话框的问题
因项目需要,要在dll(项目要求规则dll,不允许用扩展dll)中封装对话框,由主程序加载,以子窗口方式显示,结果发现主程序在调用CDialog::Create时,this指针发生变化,后面再用到this指针,程序异常
主程序代码如下
BOOL CtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
typedef int (*pFunGetUI)(void*& p_dlg,unsigned int& i_dlg_id);
HINSTANCE hExeIns=AfxGetInstanceHandle();
HINSTANCE hInstance =LoadLibrary( L"xxx.dll");
pFunGetUI getUI=(pFunGetUI)GetProcAddress(hInstance,"GetUI") ;
AfxSetResourceHandle(hInstance);
unsigned int dlg_id=0;
CDialog * pDlg=0;
getUI((void*&)pDlg,dlg_id);
if( pDlg->Create(dlg_id)==FALSE)//这一步成功了,但是主程序this指针发生了变化,好像内存溢出了
return FALSE;
AfxSetResourceHandle(hExeIns);
//后面如果使用this指针会异常
}
dll 导出函数实现如下
CMyUI * myUI=0;//全局的变量,基于CDialog的
DLL_EXPORT_API int GetUI(void*& p_dlg, unsigned int & i_dlg_id)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
myUI= new CMyUI ;
//对话框指针:
p_dlg = myUI;
//对话框模板ID:
i_dlg_id = IDD_MYUI;
return 0;
}