IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Ressources dans une DLL


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Ressources dans une DLL
    Bonjour à tous ! J'expérimente un petit problème qui commence à m'ennuyer car je ne vois pas son origine :p

    Je suis en train de faire une dll pour un plugin pour le logiciel Samurize, et pour ce faire, j'aimerais lorsqu'on configure le plugin, créer une boite de dialoguen en utilisant un fichier de ressources. Or mon problème: dans un prog normal, le code marche très bien, mais pour la fonction de la dll, j'ai tjs l'erreur WIN32 1814 : il ne trouve pas la ressources...

    Voila une partie des sources, si quelqu'un pouvait avoir la gentillesse de taper un oeil parce que la je ne vois pas... :'(

    ressource.rc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <windows.h>
    STRINGTABLE
    BEGIN
    1 "ESSAI"
    END
    
    DIALOG1 DIALOG 60, 60, 160, 80 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "A propos"
    BEGIN
    DEFPUSHBUTTON "Ok", IDOK, 56, 50, 42, 12
    LTEXT "Mon beau programme !", -1, 60, 18, 80, 10
    END

    tv.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #ifndef _DLL_H_
    #define _DLL_H_
    
    #include <windows.h>
    
    #define SAMURIZE_PLUGIN_CHAR extern "C" __declspec&#40;dllexport&#41; char* __stdcall
    #define SAMURIZE_PLUGIN_INT extern "C" __declspec&#40;dllexport&#41; int __stdcall
    
    #define TVIP "62.23.8.133"
    #define TVURL "sql_grille.asp?plage=4"
    #define TVURL2 "grille.asp"
    #define PATH "tvinfo.dat"
    
    //Samurize Window Handle
    HWND hSamurize;
    HINSTANCE hdll;
    
    SAMURIZE_PLUGIN_CHAR DisplayChannel&#40;int id, char *channel,char *nbtoaffich&#41;;
    u_int getHTML&#40;char* content&#41;;
    BOOL APIENTRY Dialog1Proc&#40;HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam&#41;;
    
    
    
    //Fonction de transcriptions des erreurs WIN32
    DWORD GetError&#40;LPTSTR lpszFunction&#41;
    &#123;
    TCHAR szBuf&#91;150&#93;;
    LPVOID lpMsgBuf;
    DWORD dw = GetLastError&#40;&#41;;
    if &#40;!dw&#41;
    return dw;
    
    FormatMessage&#40;
    FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    dw,
    MAKELANGID&#40;LANG_NEUTRAL, SUBLANG_DEFAULT&#41;,
    &#40;LPTSTR&#41; &lpMsgBuf,
    0, NULL &#41;;
    
    wsprintf&#40;szBuf,
    "%s failed with error %d&#58; %s",
    lpszFunction, dw, lpMsgBuf&#41;;
    
    MessageBox&#40;NULL, szBuf, "Error", MB_OK|MB_ICONERROR&#41;;
    
    LocalFree&#40;lpMsgBuf&#41;;
    return dw;
    &#125;
    
    #endif /* _DLL_H_ */
    tv.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include "tv.h"
    #include <iostream>
    #include <creseau.h>
    #include <windows.h>
    #include <fstream>
    
    BOOL APIENTRY DllMain &#40;HINSTANCE hInst /* Library instance handle. */ ,
    DWORD reason /* Reason this function is being called. */ ,
    LPVOID reserved /* Not used. */ &#41;
    &#123;
    hdll=hInst; // Sauver pour le dialogbox
    
    switch &#40;reason&#41;
    &#123;
    case DLL_PROCESS_ATTACH&#58;
    hdll=hInst; // Sauver pour le dialogbox
    break;
    case DLL_PROCESS_DETACH&#58;
    break;
    case DLL_THREAD_ATTACH&#58;
    break;
    case DLL_THREAD_DETACH&#58;
    break;
    &#125;
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
    &#125;
    
    SAMURIZE_PLUGIN_CHAR init&#40;&#41;
    &#123;
    return "DisplayChannel";
    &#125;
    
    SAMURIZE_PLUGIN_CHAR getparam&#40;char* func&#41;
    &#123;
    if &#40;!strcmp&#40;func,"DisplayChannel"&#41;&#41;
    return "Chaine à afficher|Nombre de résultats=5|";
    else
    return "|";
    &#125;
    
    SAMURIZE_PLUGIN_INT dlltype&#40;&#41;
    &#123;
    return 1;
    &#125;
    
    SAMURIZE_PLUGIN_CHAR getinfo&#40;int infonum&#41;
    &#123;
    switch&#40;infonum&#41;
    &#123;
    case 1&#58; return "Programmes TV belges";
    case 2&#58; return "Eagleamon";
    case 3&#58; return "0.1";
    case 4&#58; return "25/08/05";
    case 5&#58; return "26/08/05";
    case 6&#58; return "http&#58;//www.jesaispasencore.be";
    case 7&#58; return "eagleamon@swing.be";
    &#125;
    return "";
    &#125;
    
    SAMURIZE_PLUGIN_INT dllstartup&#40;HWND hwnd, int dlltype&#41;
    &#123;
    /* TODO &#40;#1#&#41;&#58; Changer config samurize pour recharger toutes les X
    minutes */
    //Save the Samurize Handle
    hSamurize = hwnd;
    char buf&#91;30&#93;;
    itoa&#40;&#40;int&#41;hdll,buf,10&#41;;
    MessageBox&#40;0,buf,"Alors?",MB_OK&#41;;
    return 0;
    &#125;
    
    SAMURIZE_PLUGIN_INT dllshutdown&#40;int id&#41;
    &#123;
    return 0;
    &#125;
    
    SAMURIZE_PLUGIN_INT configure&#40;&#41;
    &#123;
    char buf&#91;30&#93;;
    
    if &#40;LoadString&#40;hdll,1,buf,30&#41;&#41;
    MessageBox&#40;hSamurize,buf,"Essai",MB_OK&#41;;
    else
    GetError&#40;"LoadString"&#41;;
    if &#40;DialogBox&#40;hdll, "DIALOG1" , hSamurize, &#40;DLGPROC&#41;Dialog1Proc&#41;==-1&#41;
    GetError&#40;"DialogBox"&#41;;
    
    return 0;
    &#125;
    
    BOOL APIENTRY Dialog1Proc&#40;HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam&#41;
    &#123;
    switch &#40;uMsg&#41;
    &#123;
    case WM_INITDIALOG&#58;
    
    return TRUE;
    
    case WM_COMMAND&#58;
    if &#40;LOWORD&#40;wParam&#41; == IDCANCEL || LOWORD&#40;wParam&#41; == IDOK&#41;
    &#123;
    EndDialog&#40;hDlg,0&#41;;
    return TRUE;
    &#125;
    
    default&#58;
    return FALSE;
    &#125;
    &#125;

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Lol je précise, c dans SAMURIZE_PLUGIN_INT configure()

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    C'est de la programmation Windows, je déplace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DialogBox&#40;hdll, "DIALOG1"
    inclut "ressource.h" dans ton code, et remplace "DIALOG1" par MAKEINTRESOURCE( DIALOG1 ).

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Përsonne n'a une idée ?

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    1) Déjà, ta fonction GetError(), elle ne devrait pas être dans le .h (sauf si tu la déclares inline)
    2) Tu peux poster ton resource.h ?

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Tout à fait d'accord pour la fonction d'erreur... Je l'ai faite en quatrième vitesse et comme je n'avais que ça d'ouvert à ce moment, mais elle ca filer dans ma lib

    Mais je n'ai pas de ressource.h, c'est de la que viendrai le prblème ? On ne peut pas juste utiliser un .Rc ?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ah, tu n'as pas généré le rc avec visual...

    C'est ce que je voulais savoir, car je voulais être sûr que le nom de la BDD était bien "DIALOG1" et non pas un nom redéfini par resource.h...

    Je pense que ton hDll doit être invalide quelque part, déjà parce qu'il est complètement déclaré dans tv.h (tu devrais le déclarer extern dans tv.h et l'instancier seulement dans un seul .c pour en être sûr. De plus, je ne sais pas si le paramètre hInst est valide dans tous les appels ou seulement dans DLL_PROCESS_ATTACH...

    Ta DLL, elle arrive à trouver d'autres ressources (comme la stringtable) ou c'est tous les chargements qui foirent?
    Et sinon, ta DLL, tu la déclares à la compilation ou tu la charges avec LoadLibrary() ?

  8. #8
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    il faut spécifier à ton appli que tu va chercher les resources dans ta DLL avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            HINSTANCE dll=LoadLibrary&#40;"MaDll.dll"&#41;;
            if&#40;dll&#41;  AfxSetResourceHandle&#40;dll&#41;;
    tiré de la FAQ VC++ :

    http://c.developpez.com/faq/vc/?page...gMultiLanguage
    et
    http://c.developpez.com/faq/vc/?page...akeResourceDLL

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par eagleamon
    Përsonne n'a une idée ?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Citation Envoyé par matazz
    il faut spécifier à ton appli que tu va chercher les resources dans ta DLL avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            HINSTANCE dll=LoadLibrary&#40;"MaDll.dll"&#41;;
            if&#40;dll&#41;  AfxSetResourceHandle&#40;dll&#41;;
    Euh, les fonctions AfxQuelqueChose, ne sont-ce pas des fonctions uniquement pour MFC?
    Si ça sert uniquement à changer pour AfxGetApp()->LoadQuelqueChose, ça sort du problème courant qui ne parle pas de MFC (et qui utilise déjà hDll)...

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai été pris de cours

    Oui en effet, c'est compilé avec Dev-cpp (et winres). Pour le loadlibrary j'avais essayé mais cela n'a pas fonctionné non plus. Sinon en fait, c un plugin pour un logiciel appelé Samurize, donc en fait, je n'appelle pas directement ma dll, je l'utilise dans Samurize

    Sinon pour le handle, je n'ai pas essayé en externe, mais ou devrais-je alors le récupérer ? DLL_ATTACH ?

    Merci pour vos réponses en tout cas !!!

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai oublié de préciser, en effet, la même erreur se produit pour charger une string de la table...

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Mais par contre, Samurize parvient à lançer la fonction elle-même, c'est ça? c'est la ressource qu'il ne trouve pas...

    Tu as essayé d'afficher la valeur de hDll dans ta fonction? (et au passage, d'afficher aussi GetModuleHandle("MaDll.dll"), pour comparer...)

    Je ne sais pas du tout quel genre de programme est winres (un éditeur de ressources ou un compilo de ressources?) donc je ne peux rien te dire dessus...

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Oui tout à fait, c samurize qui le lance (un mini SDK/API est fourni). Pour le Hdll j'ai essayé de l'affiché au DLL_ATTCH, mais la messagebox n'apparait pas (je ne sais pas du tout pq) et dans la dllstartup(..) il renvoit 0, mais je vais essayer GetmoduleHandle pour voir

    Winres c le compilo de ressources fournit avec Dev-cpp, pour une appli normale, je n'ai pas de problèmes, mais la...

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/11/2011, 15h27
  2. Ressource dans une dll
    Par WebPac dans le forum Delphi
    Réponses: 1
    Dernier message: 30/03/2007, 11h40
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo