Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Lanciare Dialog

  1. #1

    [C++] Lanciare Dialog

    Salve a tutti ,
    il mio problema è come da titolo lanciare una Dialog da un metodo di una dll.

    Sto lavorando su di una applicazione che alla sua apertura chiama una funzione di nome AppOpen.

    Per ora riesco a lanciare la Dialog solo dalla InitIstance della dll ma invece vorrei fare ciò all'interno di AppOpen .

    Spero di essermi spiegato sufficientemente .

  2. #2

    Re: [C++] Lanciare Dialog

    Originariamente inviato da DieghitoC
    Salve a tutti ,
    il mio problema è come da titolo lanciare una Dialog da un metodo di una dll.

    Sto lavorando su di una applicazione che alla sua apertura chiama una funzione di nome AppOpen.

    Per ora riesco a lanciare la Dialog solo dalla InitIstance della dll
    Se parli del DllMain, è una cosa vietatissima, nel DllMain non dovresti fare altro oltre che inizializzare variabili. L'unica dll che ti puoi aspettare che sia caricata è kernel32.dll.
    ma invece vorrei fare ciò all'interno di AppOpen .
    Se l'applicazione richiama questa tua funzione non dovrebbe cambiare niente...
    Spero di essermi spiegato sufficientemente .
    Io non ho capito quale sia il problema esattamente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Mi sono spiegato male..
    Allora ho un programma che una volta lanciato chiama la funzione da una dll:

    #define DLL extern "C" __declspec(dllexport)

    DLL void AppOpen(TCHAR *szPC, TCHAR *szUsb , TCHAR *szVer)
    {
    //vorrei chiamare la dialog se possibile da qui dentro in modo da
    //usare i parametri passati
    }

    Per ora riesco a lanciare la dialog invece solo qui , in questo caso però la funzione AppOpen deve ancora essere chiamata e quindi non ho i suoi parametri

    BOOL CitanormApp::InitInstance()
    {
    CWinApp::InitInstance();

    m_itaDlg.DoModal();
    return TRUE;
    }

    Molto probabilmente sto sbagliando alla grande , portate pazienza sono un novello

    Spero di aver fatto capire il problema

  4. #4
    Ma se fai
    codice:
    m_itaDlg.DoModal();
    da dentro AppOpen cosa succede?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    niente..

    Ti posto il codice per intero :
    -------------------------------------------------------
    ita.cpp

    BEGIN_MESSAGE_MAP(CitanormApp, CWinApp)
    END_MESSAGE_MAP()

    // CitanormApp construction

    CitanormApp::CitanormApp()
    {
    // TODO: add construction code here,
    // Place all significant initialization in InitInstance
    }


    // The one and only CitanormApp object

    CitanormApp theApp;


    // CitanormApp initialization

    BOOL CitanormApp::InitInstance()
    {
    CWinApp::InitInstance();
    m_itaDlg.DoModal();
    return TRUE;
    }

    DLL void AppOpened(TCHAR *szPCcode, TCHAR *szUsbCode , TCHAR *szVersion)
    {

    }

    ------------------------------------------------------------
    ItaDlg.h

    // finestra di dialogo ItaDlg

    IMPLEMENT_DYNAMIC(ItaDlg, CDialog)

    ItaDlg::ItaDlg(CWnd* pParent /*=NULL*/)
    : CDialog(ItanormDlg::IDD, pParent)
    {

    }

    ItaDlg::~ItaDlg()
    {
    }

    void ItaDlg:oDataExchange(CDataExchange* pDX)
    {
    CDialog:oDataExchange(pDX);
    }


    BEGIN_MESSAGE_MAP(ItaDlg, CDialog)
    END_MESSAGE_MAP()

    // gestori di messaggi ItaDlg

    BOOL ItanormDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    // inizializzazione dialogo
    return TRUE;
    }

    --------------------------------------------------------------
    ita.h

    class CitanormApp : public CWinApp
    {
    public:
    CitanormApp();

    // Overrides
    public:
    virtual BOOL InitInstance();

    DECLARE_MESSAGE_MAP()
    public:
    ItaDlg m_itaDlg;
    };

    --------------------------------------------------------
    itaDlg.h

    #include "resource.h"
    // finestra di dialogo ItanormDlg

    class ItaDlg : public CDialog
    {
    DECLARE_DYNAMIC(ItanormDlg)

    public:
    ItaDlg(CWnd* pParent = NULL); // costruttore standard
    virtual ~ItaDlg();

    // Dati della finestra di dialogo
    enum { IDD = IDD_DIALOG1 };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX); // Supporto DDX/DDV

    DECLARE_MESSAGE_MAP()
    public:
    virtual BOOL OnInitDialog();

    };

  6. #6
    Strano...
    comunque, temo di non poterti aiutare, non ho mai usato le MFC e non so se ci sono particolari accorgimenti da seguire in questi casi...
    L'unico dubbio che mi viene è che l'Init venga chiamato da un thread e la funzione da un altro, e non sia abilitata la versione multithreading della CRT e delle MFC, ma non so se possa c'entrare qualcosa...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.