在包装好的DLL中启动MFC窗口

时间:2018-10-06 19:47:21

标签: c++ dll mfc wrapper

我试图钩住应用程序,并在新的MFC窗口中启动它。 DLL(包装器)工作得很好,但是我在MFC中遇到问题...完整的MFC代码在“ AST”内部-包装器。主应用程序对象已创建,但尚未打开MFC窗口。我有控制点(消息框),并通过它我知道代码在哪里停止,这一刻是在InitInstance内部,在CCommandLineInfo-> ParseCommandLine和ProcessShellCommand中。我不知道为什么,但是此刻AST已经冻结,我什么也不能做。

BOOL CwelibApp::InitInstance(){
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);

InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

CWinAppEx::InitInstance();

// Initialize OLE libraries
if (!AfxOleInit())
{
    AfxMessageBox(IDP_OLE_INIT_FAILED);
    return FALSE;
}

AfxEnableControlContainer();
EnableTaskbarInteraction(FALSE);

// Place all significant initialization in InitInstance
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(4);  // Load standard INI file options (including MRU)


InitContextMenuManager();
InitKeyboardManager();
InitTooltipManager();

CMFCToolTipInfo ttParams;
ttParams.m_bVislManagerTheme = TRUE;
weApplication.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
    RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CMFCApplication2Doc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CMFCApplication2View));

if (!pDocTemplate)
    return FALSE;

Say::Box("Init MFC #1");

AddDocTemplate(pDocTemplate);

if(m_hInstance)
    Say::Box("m_hInstance");
Say::Box("Init MFC #2");

CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);  //Freeze...
Say::Box("Init MFC #3");

if (!ProcessShellCommand(cmdInfo))
    return FALSE;

Say::Box("Init MFC #4");

m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

Say::Box("Init MFC #5");
return TRUE;};

哪里有问题?如何使用CFrameWndEx,CWinAppEx在DLL中打开MFC应用程序?
我在Project默认值中有“在静态库中使用FMC”。

0 个答案:

没有答案