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

C++ Discussion :

problemes pour creer une DLL


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut problemes pour creer une DLL
    voila je suis un vrai débutant en C C# mais j'ai vraiment de besoin de créer une DLL que je pourrais utiliser en ruby pour changer la resolution de mon ecran.

    bon, trouver une fonction pour changer la resolution n'a pas été trop difficile, je me suis alors dis que faire une DLL avec cette fonction serait simple. Je me suis trompé

    lorsque j'essaie de compiler ma dll j'ai un message d'erreur du genre,
    function `int SetResolution(int, int, int)' definition is marked dllimport.

    okay, c'est sympa de me le dire mais moi, le C j'y connais que dalle.

    alors voilà mon code, en esperant que quelqu'un puisse m'aider.

    dllmain.c
    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
     
    #include "dllmain.h"
    #include <Windows.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    DLLIMPORT int SetResolution(int width, int height, int fullscreen)
    {
              DEVMODE dm;
              ZeroMemory(&dm, sizeof(dm));
              dm.dmSize = sizeof(dm);
     
              if (0 != EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm))
              {
                    dm.dmPelsWidth = width;
                    dm.dmPelsHeight = height;
     
                    long lRet = ChangeDisplaySettings(&dm, fullscreen);
                    if (DISP_CHANGE_SUCCESSFUL != lRet)
                    {
                    }
              }
    }
     
     
     
    BOOL APIENTRY DllMain (HINSTANCE hInst,
    DWORD reason,
    LPVOID reserved )
    {
    switch (reason)
    {
    case DLL_PROCESS_ATTACH:
    break;
     
    case DLL_PROCESS_DETACH:
    break;
     
    case DLL_THREAD_ATTACH:
    break;
     
    case DLL_THREAD_DETACH:
    break;
    }
     
    return TRUE;
    }
    dllmain.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _DLL_H_
    #define _DLL_H_
     
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else
    # define DLLIMPORT __declspec (dllimport)
    #endif
     
    DLLIMPORT int SetResolution(int, int, int);
     
    #endif
    main.c
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
     
    int main(int argc, char *argv[])
    {
     
    HINSTANCE mydll;
    typedef int(*DLLSTART)();
    DLLSTART fonction;
     
    mydll = LoadLibrary("DLL.dll");
     
    fonction = (DLLSTART) GetProcAddress(mydll, "SetResolution");
     
    fonction();
     
    FreeLibrary(mydll);
     
    return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1°) N'utilise pas DLLIMPORT pour ta define : le nom conseillé est NOMDETADLL_API

    2°) Rajoute dans les options de compilation le define BUILDING_DLL (même remarque que pour DLLIMPORT) :
    • sous Visual, c'est dans les project settings/properties -> C/C++ -> Preprocessor -> preprocessor definitions
    • Avec un compilateur de type GCC, tu rajoutes le paramètre -D BUILDING_DLL à la ligne de commande
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup pour l'aide.
    après plusieurs heures j'ai enfin réussi a utiliser ma fonction dans mon programme ruby.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme pour charger une DLL
    Par labluegirl dans le forum Bibliothèques
    Réponses: 26
    Dernier message: 02/04/2009, 11h36
  2. probleme pour creer une base de donnee
    Par caroen dans le forum MySQL
    Réponses: 5
    Dernier message: 06/11/2008, 13h50
  3. Probleme pour creer une interface
    Par drcd dans le forum Langage
    Réponses: 5
    Dernier message: 14/10/2006, 17h25
  4. Réponses: 1
    Dernier message: 18/07/2006, 16h44
  5. Mkisofs - problème pour créer une image
    Par tomnie dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/08/2004, 11h44

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