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 :

problème de DLL


Sujet :

C++

Vue hybride

deubelte problème de DLL 27/05/2007, 15h27
Laurent Gomila Les prototypes de tes... 27/05/2007, 16h56
deubelte je sais, je les ai modifié,... 27/05/2007, 17h14
Laurent Gomila Je serais tenté de dire... 27/05/2007, 17h37
deubelte En réalité, c'est ce que j'ai... 27/05/2007, 17h41
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut problème de DLL
    bonjour
    j'essaye de créer un DLL avec VC2005, afin que cette DLL soit utilisable par excel en VBA.
    J'ai crée en C++ une fonction simple, qui remplit un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     char *tab=new char[30];
    void finum::g(void){
    	for (int i=0;i<31;i++){
    		long j=i*200;
       tab[i]=j;
       	}
    }
    long finum::gg(int i){
        long h=tab[i];
    return h;}
    int main(){
    return 0;
    }
    la fonction g remplit le tableau tab, par i*200, avec i=0...30.
    la fonction gg accède au tableau, pour renvoyer la valeur tab[i].


    Voici le programme VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Declare Function gg Lib "C:\WINDOWS\system\finum.dll" Alias "_gg@4" (ByVal x As Long) As Double
     Declare Function g Lib "C:\WINDOWS\system\finum.dll" Alias "_g@0" () As Long
     
    Sub test()
        Dim ii As Long     
        Dim i, ki, m, cnt, N As Long
           m = g()
       For ii = 1 To 15
          ki = gg(ii)    
        Sheets("test").Range("A1").Cells(ii, 1) = ki
          Next ii
     
    End Sub
    la fonction m appelle la fonction g qui remplit le tableau, puis la fonction gg
    appelle la fonction en C++.

    J'ai essayé, ca marche lorsque les valeurs du tableau que l'on remplit sont des faibles valeurs. Mais lorsqu'on entre dans le tableau de fortes valeurs, ca renvoie dans VBA des valeurs différentes.

    Je pense que ca vient d'un probleme de correspondance entre les types VBA/C++. J'ai essaye plusieurs combinaisons mais ca marche pas.

    Je sais qu'il y a un tuto la dessus, mais en vain, ca ne m'a pas aidé.

  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
    Les prototypes de tes fonctions sont complétement différents entre la version C++ et la version VBA...

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    je sais, je les ai modifié, mais ca ne change rien.

    on est bien d'accord pour dire que les éléments dans tab sont de types int?
    (0,100,200,...3100).

    de ce fait, de quel type la fonction gg en VBA devrait elle etre ?
    Integer, Double, Long,.....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Declare Function gg Lib "C:\WINDOWS\system\finum.dll" Alias "_gg@4" (ByVal x As Long) As Integer
    Il n'y a pas d'équivalent à void en VBA.

  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
    Je serais tenté de dire Integer pour int et Long pour long, mais peut-être que pour communiquer via des DLLs il y a plus de restrictions sur les types.

    Ensuite pour le retour void, je ne sais pas si c'est gérable directement en VBA (il n'y a pas la notion de Procedure ?), donc au pire tu peux faire retourner un entier à ta fonction C++, quitte à ce qu'il ne serve à rien.

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Ensuite pour le retour void, je ne sais pas si c'est gérable directement en VBA (il n'y a pas la notion de Procedure ?), donc au pire tu peux faire retourner un entier à ta fonction C++, quitte à ce qu'il ne serve à rien.
    En réalité, c'est ce que j'ai fait, et ca marche tres bien.

    en tout cas, en VBA, les int vont de -255 à 256 (ou -256 à 255) ????

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    c'est bizarre parce que le nombre inclus dans le tableau est parfaitement transmis à Excel s'il est inférieur à 126 (ou 125 je ne sais pas exactement), mais dès qu'il depasse 125, il y a comme un dépassement, un débordement je dirais.

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

Discussions similaires

  1. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00
  2. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43
  3. Problème de dll à l'execution
    Par gege2061 dans le forum Windows
    Réponses: 3
    Dernier message: 11/03/2005, 11h22
  4. problème execution dll
    Par semenzato dans le forum MFC
    Réponses: 15
    Dernier message: 19/12/2003, 16h40
  5. Problème de DLL.
    Par Lunedor dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2003, 10h17

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