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 :

Creation d'une dll


Sujet :

C++

Vue hybride

laetous Creation d'une dll 16/09/2006, 09h18
Laurent Gomila Il faut passer par un type... 16/09/2006, 09h24
laetous Si ma memoire est bonne j'ai... 16/09/2006, 11h18
Laurent Gomila Tu as essayé quoi ? ... 16/09/2006, 11h26
laetous J'au testé le type BSTR et ca... 16/09/2006, 11h38
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Par défaut Creation d'une dll
    J'ai essayé de créer une dll à partir d'un programme écrit en c++. Le probleme tout marche s'il ya pas de paramétres à passer. J'ai appelé cette dll en créant un petit programme en vb.

    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
       ' C++
     
    #include "Def.h"
    #include <stdio.h>
    #include <string.h>
     
     
    void __declspec(dllexport) HelloWorld(void)
    {
        MessageBox(NULL,"Hello !","Message",MB_OK);
    } 
     
    void __declspec(dllexport) ReadFILE(char *argv[]) 
    {
    FILE * fichier;char *td[30]; int i, nbo;
    /* Ouverture d'un fichier */
    fichier = fopen( "c:\\test04.txt", "rb");
    //fichier = fopen(argv[0]);
    printf("\nxxxxxxxxx%s\n", fichier);
    if( fichier==NULL )
        printf("\nErreur en lecture de %s\n", "c:\\test04.txt");
    else
    {
        /* Lecture en une seule instruction */
       nbo = fread( td, sizeof(char), 30, fichier);
       printf("%d 111 elements lus a partir de %s\n", nbo, "c:\\test04.txt");
       printf(" %s", td);
       for( i=0; i<nbo; i++) printf(" %s", td[i]);
       printf("\n");
       fclose( fichier);
    }
    }
     
    void __declspec(dllexport) WRITEFILE (char * pfichier)
    {
    char t1[30]; int i;
    FILE * fichier;
    /* Ouverture d'un fichier */
    fichier = fopen( "c:\\test04.txt", "wb");
    if( fichier==NULL )
        {
        printf("\nErreur en lecture de %s\n", "c:\\test04.txt");
        }
    else
        {
         for (i=0;i<=29;i++)
    	{
    	 strncpy (t1,"test",30);
    	 fwrite (t1,sizeof(char),30,fichier);
    	}
         }
    fclose(fichier);
    }
    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
     ' en vb
    Option Explicit
     
     
     
    Private Declare Sub HelloWorld Lib "Test2.dll" Alias "?HelloWorld@@YAXXZ" ()
    Private Declare Sub ReadFile Lib "Test2.dll" Alias "?ReadFILE@@YAXXZ" () '(ByVal p_var1 As Integer, ByVal p_Var2 As Variant)
    Private Declare Sub WriteFile Lib "Test2.dll" Alias "?WRITEFILE@@YAXPAD@Z" (ByVal p_var1 As String)
     
    Private Sub Command1_Click()
      Dim l_tab() As String
      ReDim l_tab(2)
      l_tab(1) = "TEST"
      l_tab(2) = "TEST1"
      WriteFile "c:\\test04.txt"
    End Sub

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il faut passer par un type spécial en C++ pour gérer les chaînes (BSTR ou un truc de ce genre).

    Ensuite tu devrais déclarer tes fonctions en extern "C" pour virer les décorations de nom.

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Par défaut
    Si ma memoire est bonne j'ai essayé mais ca n'a pas marché. C'est quoi decoration des noms???

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si ma memoire est bonne j'ai essayé mais ca n'a pas marché
    Tu as essayé quoi ?

    C'est quoi decoration des noms???
    C'est ce genre de chose spécifique à chaque compilo
    ?HelloWorld@@YAXXZ
    ?ReadFILE@@YAXXZ
    ?WRITEFILE@@YAXPAD@Z
    Pour s'en débarasser il suffit de déclarer tes fonctions de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    extern "C" void __declspec(dllexport) HelloWorld(void);
    // Etc...
    Là tes noms exportés deviendront :
    _HelloWorld
    _ReadFILE
    _WRITEFILE
    Si tu ne veux pas de l'underscore il faudra utiliser un fichier de définition (.def), si j'ai bien suivi.

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Par défaut
    J'au testé le type BSTR et ca n'a pas marché. Pour l'instant j'ai testé avec des chaines de caractéres qui est le nom de fichier alors que lors de l'execution de readfile je dois recuperer par reference ce qui a été lu dans un tableau (ceci je l'ai pas encore fait vu que je teste cela par bout)

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    J'au testé le type BSTR et ca n'a pas marché
    Il y a des fonctions particulières à utiliser pour manipuler les BSTR. Si jamais tu n'es pas à jour sur le sujet tu peux faire une recherche sur ce forum, il y a quelques bonnes infos.

Discussions similaires

  1. creation d'une dll appelant une autre librairie
    Par nezdeboeuf62 dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2007, 10h22
  2. Erreur de link a la creation d'une dll
    Par drcd dans le forum MFC
    Réponses: 12
    Dernier message: 29/05/2006, 15h13
  3. creation d'une dll ?
    Par alienz13 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/05/2006, 13h31
  4. probleme a la creation d'une dll
    Par anthonycosson dans le forum C++
    Réponses: 1
    Dernier message: 14/03/2006, 13h35
  5. creation d'une DLL
    Par PRUVOT dans le forum MFC
    Réponses: 4
    Dernier message: 21/10/2005, 20h46

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