我创建了一个MFC DLL工程 
想要一个结果 就是将DLL注入到进程后 马上显示对话框我在DLL这样写的CDll1App::CDll1App()
{
// TODO: add construction code here,
 m_xiaoer * pDialog;
 pDialog->DoModal() ;  // Place all significant initialization in InitInstance
}
注入到进程后  弹出错误然后有尝试这样: 
CDll1App::CDll1App()
{
// TODO: add construction code here,
 m_xiaoer* pDlg=new m_xiaoer();
pDlg->Create (IDD_DIALOG1);
pDlg->ShowWindow (SW_SHOW); // Place all significant initialization in InitInstance
}
依然弹出错误 终止进程然后我试试 API 创建对话框响应    模态对话框 HINSTANCE hInstance=(HINSTANCE)GetModuleHandle(NULL);
::DialogBox (hInstance,MAKEINTRESOURCE(IDD_DIALOG1),this->m_hWnd,DialogProc); //this-〉 = NULL 非模态响应   非模态对话框 多窗口 HINSTANCE hInstance=(HINSTANCE)GetModuleHandle(NULL);
HANDLE hDlg=CreateDialog (hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
::ShowWindow ((HWND)hDlg,SW_SHOW);
注入到进程后    程序没有错误,  但是对话框没有显示出来

解决方案 »

  1.   

    借宝地发个类似的问题:
    我做一个对话框程序,其中有一部分需要根据不同的设置显示不同的控件。
    我做了一个dll,用于创建这一部分的内容。使用CWND派生,
    BOOL WINAPI CreateSonWnd(CWnd* parentWnd,UINT theVideoID,HWND& theVideoHwnd,CString& ErrorString)
    {
    theApp.m_TheSonWnd=new SonWnd();
    bool  TheResult=theApp.m_TheVideoSonWnd->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,100,100),parentWnd,theVideoID);
    return TheResult;
    }
    创建后可以显示基本的控件
    存在两个问题:
    一是在SonWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中创建ocx实例时不起作用,也不显示;
    二是点击SonWnd时没有反应,主程序直接无响应!
    请高手指点
      

  2.   

    不知道LZ的Code有啥问题,不过我自己用的是这种办法:
    资源编辑器画好后直接建一个关联此对话框的类,然后写一个单独的函数显示窗口。最后把这个函数导出在程序里面调用就好了。栗子:void ShowTest()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 用于模块切换时的状态保护
    CTest Dlg;
    Dlg.DoModal();
    }
    typedef bool(*pShowTest)(void);
    HINSTANCE hDLL;
    pShowTest ShowTest;
    hDLL=LoadLibrary(_T("test.dll"));//加载DLL
    ShowTest=(pShowTest)GetProcAddress(hDLL,"?pShowTest@@YAXXZ");
    ShowTest();
    FreeLibrary(hDLL);//卸载DLL
      

  3.   

    我有尝试过  但是依然  程序终止崩溃,,,
    如果可以的话  请求你创建一份MFC DLL给我吧
    只要一句话吗 能正常显示对话框就好了!
      

  4.   

    我有尝试过  但是依然  程序终止崩溃,,,
    如果可以的话  请求你创建一份MFC DLL给我吧
    只要一句话吗 能正常显示对话框就好了!
    http://mail.qq.com/cgi-bin/ftnExs_download?K=75396532a380989e0ea903114033574e000f5c0a530603071c0f5d07511e5156010148505e01004c000c045455035c03570c5501663c65295455095d227f29255d5e4b4007416526&t=exs_ftn_download&code=19e2f3ea
    VS2012开发的一个小程序,模态正常,非模态有问题
    =======吐槽========
    诅咒各路网盘,各种登不上……
    诅咒QQ输入法,今天害chrome崩溃好几次……
      

  5.   

    栗子的方法是可行的
    需要在函数中加入
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    并且只能用定义对象的方式调用,如果是对象指针好像也会报错如果需要在对话框上显示ocx则需要在InitInstance()函数中增加
    AfxEnableControlContainer();
      

  6.   

    显示前加入AFX_MANAGE_STATE(AfxGetStaticModuleState());正解
      

  7.   

    exe和dll需要对资源进行切换保护。