Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C++] Finestre in una dll (Visual C++ 6)

    Ciao a tutti,

    Io sto scrivendo una dll con delle funzioni in c++ usando Visual c++ 6. Fin adesso sono riuscito a creare el funzioni e a "farle funzionare". Le ho testato con una MessageBox.

    Il mio problema è che vorrei creare delle finestre con questa dll e poi modificarne il contenuto man mano che vengono richiamate le funzioni della dll.
    È possibile?

    Ho letto nei vari post già presenti che per avere un'applicazione con finestre bisogna impostarla come Win 32 Window Application e allora compare WINMain come funzione principale. Ma io in teoria non uso nessun funziona principale perché ho solo delle funzioni e non voglio compilare il progetto come exe ma come dll, quindi non posso usare questo tipo di progetto.

    Ci sono delle libreria (magari standard già incluse) che mi permettono di creare finestre (con dei campi di testo...)?

    Esiste una documentazione della libreria <windows> che Visual c++ mi include di default nel progetto? (intendo tipo quelle su cplusplus.com).


    grazie mille!

  2. #2

    Re: [C++] Finestre in una dll (Visual C++ 6)

    Originariamente inviato da BrainBurner
    Ciao a tutti,

    Io sto scrivendo una dll con delle funzioni in c++ usando Visual c++ 6. Fin adesso sono riuscito a creare el funzioni e a "farle funzionare". Le ho testato con una MessageBox.

    Il mio problema è che vorrei creare delle finestre con questa dll e poi modificarne il contenuto man mano che vengono richiamate le funzioni della dll.
    È possibile?
    Certo, basta creare normalmente le finestre con le API.
    Esiste una documentazione della libreria <windows> che Visual c++ mi include di default nel progetto? (intendo tipo quelle su cplusplus.com).
    Certo che esiste (anche se windows.h è un header e non una libreria), è il Platform SDK (che dovrebbe essere incluso con Visual C++, anche se non ti posso garantire che ci sia nella express edition).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Grazie mille!

    In effetti adesso sapendo cosa cercare ho trovato anche una buona guida linkata in un post! http://www.aleax.it/TutWin32/tc.htm

    Però ho già cominciato a bloccarmi.. Ho scritto un programma in VB 6 che mi richiama la mia funzione nella dll quando click su un bottone.
    Questo funziona se la funzione mi apre una Message Box, ma quando uso DialogBoxParam con il mio file di risorse .rc non funziona più (la finestra non compare).

    Credo che Visual c++ mi compili correttamente il tutto visto che non segnala errori e nel cartella debug trovo anche il un file MioDialogo.res.

    Potrebbe essere che devo esportare che una qualche dichiarazione della finestra per far si che questa venga visualizzata?
    Ho sbagliato in qualche altro passaggio?
    (se creo una Win 32 Application e voglio l'esempio "Hello world!" compilandolo funziona, quindi credo di avere installato tutto!)

  4. #4
    Originariamente inviato da BrainBurner
    Questo funziona se la funzione mi apre una Message Box, ma quando uso DialogBoxParam con il mio file di risorse .rc non funziona più (la finestra non compare).
    Cosa restituisce DialogBoxParam? Se restituisce 0 o -1 cosa restituisce GetLastError? Hai provato ad eseguire il debug della tua dll quando viene richiamata dall'altro programma (devi agganciarti al processo VB6.exe se esegui l'applicazione VB all'interno dell'IDE)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Purtroppo ho dei problemi a convertire le variabili int in unsigned short* e non so cosa mi restituisce DialogBoxParam() ma sono riuscito a mettere il messaggio di errore in un message box con la funzione GetLastError e il FormatMessage trovato su un post...

    codice:
    DialogBoxParam(0,"MIODIALOGO", 0,unaDlgProc,0);
    LPSTR Message = GetWin32ErrorDescription(GetLastError());
    MessageBox (0, Message, "Hi", MB_ICONINFORMATION);
    Morale della favola il messaggio dice "The specified resource type cannot be found in the image file."

    Eppure a me sembrava di aver compilato il tutto come si deve.. Lo stesso codice eseguito in una Win32 Application di prova funziona!

    Grazie!

  6. #6
    Sicuro di aver incluso correttamente la risorsa nella dll?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Onestamente stanno venendo anche a me forti dubbi...

    Io ho inserito il file .rc nella progetto e posso anche modificare la mia finestra di dialogo... Devo forse inserirlo anche da qualche altra parte?

  8. #8
    Che io sappia no... puoi linkare uno zip contenente i due progetti che ci do un'occhiata?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Ecco: link

    Nella cartella debug di OEDisplay c'è anche il programma Prova.exe che al click sul bottone mi richiama la funzione InitDevice() nella dll.

  10. #10
    Cambia questa linea
    codice:
    DialogBoxParam(0,"MIODIALOGO", 0,unaDlgProc,0);
    in questo modo:
    codice:
    DialogBoxParam(GetModuleHandle("oedisplay.dll"),"MIODIALOGO", 0,unaDlgProc,0);
    .
    In questa maniera DialogBoxParam andrà a cercare il dialog tra le risorse della dll e non tra quelle dell'eseguibile.
    P.S.: un ultimo appunto: ora la gestione degli errori lì non serve più, ma se vuoi tenerla sistemala un po' meglio:
    codice:
    if(DialogBoxParam(GetModuleHandle("oedisplay.dll"),"MIODIALOGO", 0,unaDlgProc,0)<1)
    	{
    		LPSTR Message = GetWin32ErrorDescription(GetLastError());
    		MessageBox (0, Message, "Errore", MB_ICONINFORMATION);
    		LocalFree((HLOCAL)Message); //Mooolto importante
    	}
    .
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.