Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [WIN32 / C] Resource file, Errore 1812

    Buonasera a tutti

    Ho utilizzato Visual Studio 6 per creare una dll, a cui ho incorporato un file risorse che inizialmente conteneva solo informazioni sulla versione. Ora si presenta la necessità di mostrare anche qualche informazione e video, allora ho aggiunto al file risorse un dialog per contenere queste informazioni.

    Quando, con un client esterno, la libreria viene caricata, ottengo dal sistema operativo questo errore

    Il file immagine specificato non conteneva una sezione risorse.
    che è identificato dal codice 1812.

    La cosa strana è che nel file binario .dll le informazioni sulla versione sono presenti..mentre sembrano mancare quelle relative al dialog in questione.

    Non so ancora dove mettere le mani...per il momento l'indiziato principale è visual studio.
    Allego intanto i parametri con cui mi compila il progetto.

    codice:
    /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" 
    /D "_USRDLL" /D "PROJ_NAME_EXPORTS" /D "_DEBUG_LOG" /D "_DEBUG_LOGV" /D "CMAP" /Fp"Debug/proj_name.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
    Ho notato, confrontando questa stringa con un altro progetto creato ad hoc che invece funziona, che una differenza nei parametri di configurazione sta nel flag /MTd: le versione funzionante porta ML

    Nello specifico, MTd: MTd link with LIBCMTD.LIB debug lib
    /ML link with LIBC.LIB

    Puo entrarci qualcosa?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Mi viene un dubbio: mi sono spiegato male?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Aggiungo un elemento importante.

    Ho trovato
    questo post in giro. Il tipo che l'ha scritto ha avuto un problema praticamente equivalente, anche se io non ho niente a che vedere con Maya.

    In buona sostanza lui dice che, se si crea una libreria (statica o dinamica) e si compilano nella libreria stessa delle risorse, quando un programma esterno la carica non vede queste risorse. Per vederle sembra che il programma client debba incorporarle lui stesso. Mi spiego meglio.

    Progetto A:
    contiene l'implementazione della libreria
    contiene il file di risorse con la gui della libreria

    Progetto B:
    contiene un eseguibile che carica la libreria e la usa

    In questo scenario, nel momento in cui chiamo una banale DialogBox(), ottengo il famoso errore 1812 e la gui non viene mostrata.

    Ho provato quanto suggerito in quel post e lo scenario diventa:
    Progetto A:
    contiene l'implementazione della libreria
    contiene il file di risorse con la gui della libreria

    Progetto B:
    contiene un eseguibile che carica la libreria e la usa
    contiene lo stesso file .rc del progetto A.

    Cosi invece funziona.

    Questo fatto mi sembra una cagata spaventosa...ma dipende da Visual Studio oppure è proprio cosi che è fatta la gestione delle .rc? Questo mi creerebbe dei problemi, perchè io non ho alcun controllo sul programma client che invoca la mia libreria, che tra l'altro è scritto in un altro linguaggio.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Ho risolto.

    Il problema dipendeva dal fatto che alla mia DialogBox() non passavo nessun HANDLE.
    Passandogli il parametro HINSTANCE (quello del main della DLL per intenderci), il dialogo viene mostrato correttamente.

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.