L'exportation d'une boîte de Dialogue MFC à partir d'une DLL

21 juillet: mise à Jour, voir en bas de

Dans VC++ 2005, j'ai 2 projets. Tout d'abord, un projet MFC DLL (pas une DLL d'extension) qui a une simple boîte de dialogue:

TestDlg.h

#pragma once
#include "afxwin.h"
#include "resource.h"
//CTestDlg dialog
namespace Dialogs
{
    class __declspec(dllexport) CTestDlg : public CDialog
    {
        DECLARE_DYNAMIC(CTestDlg )

    public:
        CTestDlg (CWnd* pParent = NULL);   //standard constructor
        virtual ~CTestDlg ();

    //Dialog Data
        enum { IDD = IDD_TEST_DLG };
    }
}

Puis j'ai une application console Win32, MFC bibliothèques, qui n':

TestApp.cpp

#include "stdafx.h"
#include "TestApp.h"
#include <TestDlg.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    //initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        //TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: MFC initialization failed\n"));
        nRetCode = 1;
    }
    else
    {

        Dialogs::CTestDlg dlg;
        dlg.DoModal();
    }
    return nRetCode;
}

Il construit et exécute, mais aucune boîte de dialogue s'affiche. Entrer dans DoModal()...

dlgcore.cpp

INT_PTR CDialog::DoModal()
{
    //can be constructed with a resource template or InitModalIndirect
    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
        m_lpDialogTemplate != NULL);

    //load resource as necessary
    LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
    HGLOBAL hDialogTemplate = m_hDialogTemplate;
    HINSTANCE hInst = AfxGetResourceHandle();
    if (m_lpszTemplateName != NULL)
    {
        hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
        HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
        hDialogTemplate = LoadResource(hInst, hResource);
    }
    if (hDialogTemplate != NULL)
        lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

    //return -1 in case of failure to load the dialog template resource
    if (lpDialogTemplate == NULL)
        return -1;

    ... more stuff

Pour quelque raison que ce soit, il semble qu'il ne peut pas charger la ressource, de retour de -1 à la fin de la section copiée. J'ai regardé quelques articles sur CodeGuru, etc, et pas vu quelque chose d'évident. Est ma classe à ne pas être exportés/importés droit? Ou est-ce un problème de ressource? Ou est le problème que j'essaie de l'afficher à partir d'une console (MFC) app?

21 juillet, Jour
J'ai créé un substituée DoModal de la manière suivante:

INT_PTR CTestDlg::DoModal()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
    return CDialog::DoModal();
}

Cela semble fonctionner bien que devrais-je être majeur une autre méthode pour obtenir les fonctionnalités plus générique?

InformationsquelleAutor Mr. Boy | 2010-07-16