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 :

Création d'une DLL en C


Sujet :

Windows

  1. #1
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut Création d'une DLL en C
    Bonjour. Je cherche à créer une DLL en C qui simule une carte d'acquisition. J'ai donc suivi un tutorial et créer un fichier .h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "windows.h"
    #define export __declspec (dllexport)
    
    export int __stdcall StartAcquisition(void);
    export void __stdcall StopAcquisition(void);
    export int __stdcall GetValues(float*mtab, int maxval);
    DWORD WINAPI Fthread( LPVOID lpParam);
    double Lit_une_donnee();
    un fichier .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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #include "dllacq.h"
    #include <math.h>
    
    volatile int FINACQ=0;
    volatile float tabacq[1000];
    double PI=3.141;
        int ir;
    	int iw;
        int v;
    
    int __stdcall StartAcquisition(void) {
        HANDLE hThread;
        DWORD dwThreadId, dwThrdParam = 1;
        
        FINACQ = 0;
    
        
        hThread = CreateThread(NULL, 0, Fthread, &dwThrdParam, 0, &dwThreadId);
        if (hThread == NULL) {
                    return(GetLastError());
        }
        else{
             CloseHandle(hThread);
             }
        return 0;
    }
    
    DWORD WINAPI Fthread( LPVOID lpParam) {
    	while(FINACQ != 1)
    	  {
    		if (iw = ir)
    		{
    			tabacq[iw] = Lit_une_donnee();
    			if(iw != ir)
    			{
    			iw=(iw+1)%1000;
    			}
    		}
            Sleep (400);
          }
                       FINACQ=2;
                       return 0;
    }
    
    double Lit_une_donnee() {
           int parasite;
           static double X=0;
           
           X+=0.3; if(X> (2*PI)) X = X - (2*PI);
           parasite = (rand() % 3 - 2);
           return(10*sin(X) + parasite);
    }
    
    void __stdcall StopAcquisition(void) {
         FINACQ = 1;
         while(FINACQ != 2);
         FINACQ=0;
         }
         
    
    int __stdcall GetValues(float*mtab, int maxval){
        int n=0;
        while ((ir!= iw)&&(n<=maxval))
    	{
    		mtab[n]= tabacq[ir];
    		ir=(ir+1)%1000;
    	}
                            
        return n;
    }
    et un fichier .def

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LIBRARY	DLLacq
    DESCRIPTION "DLL test"
    EXPORTS
           StartAcquisition
           StopAcquisition
           GetValues
    Je voudrais savoir comment je peux tester les procédures de ma DLL.

  2. #2
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Pour tester les procédures de la DLL, il faut créer une application qui importe ces procédures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "dllacq.h"
    
    float mtab[10];
    
    int main(int argc, char* argv[])
    {
    	int status = StartAcquisition();
    	int res = GetValues(mtab, 10);
    	StopAcquisition();
    	return 0;
    }
    S'assurer que la DLL est dans le PATH ou dans le répertoire courant.
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

Discussions similaires

  1. Pb de compilation lors de la création d'une DLL
    Par Annaced dans le forum Visual C++
    Réponses: 8
    Dernier message: 15/06/2010, 23h26
  2. création d'une dll (classe c++)
    Par TheShadow dans le forum MFC
    Réponses: 4
    Dernier message: 10/04/2006, 16h21
  3. Réponses: 4
    Dernier message: 10/04/2006, 16h12
  4. Problème de création d'une dll...
    Par adrien954 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/10/2005, 10h46
  5. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24

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