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

Macros et VBA Excel Discussion :

Erreur d'execution '453' Point d'entrée d'une DLL introuvable [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Erreur d'execution '453' Point d'entrée d'une DLL introuvable
    Bonjour!

    Je cherche à réaliser une dll C++ utilisable via EXCEL.
    J'utilise Visual C++ Express 2008, et Excel 2003.

    Je pense avoir tout bon.. sauf que rien ne marche

    Ce que je ne comprend pas c'est que j'avais déjà réussi à faire fonctionner ce code!! (en fouillant dans des vieux postes de ce forums notamment)

    Voici le code C++ :

    MaDll.h :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef EXTERN_C
    #define EXTERN_C extern "C"
    #endif
     
    #ifndef MADLL_API
    #define MADLL_API __declspec(dllexport)
    #endif
     
    EXTERN_C MADLL_API int __stdcall Toto (int a, int b);

    MaDll.cpp :
    Code c : 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 "stdafx.h"
    #include "MaDll.h"
     
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
     
    EXTERN_C MADLL_API int __stdcall Toto (int a, int b){
    	return a+b;
    }

    MaDll.def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LIBRARY ViableVix_dll
    EXPORTS
    	Toto		= _Toto@8


    Et voici comment j'ai écrit le fichier VBA correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Declare Function Toto Lib "MaDll.dll" (ByVal x As Long, ByVal y As Long) As Long
     
     
    Private Sub RunCalibration_Click()
    nb_reels = CLng(ActiveSheet.Range("nb_reels").Value)
    nb_x = CLng(ActiveSheet.Range("nb_x").Value)
    i = Toto(nb_x, nb_reels)
    MsgBox (Str(i))
    End Sub
    Bon vous l'aurez compris, ça plante à "i=Toto..."

    J'ajoute que j'ai aussi verifié les décorations utilisées par VC++ en générant le fichier Map.

    Pour finir, je n'ai pas oublié d'ajouter le fichier MaDll.dll dans le dossier System de mon pc (d'ailleur c'est vraiment moche.. il n'y a pas d'autre solutions??)

    Voili voilou ma petite histoire...

    Pouriez vous me donner un coup de pousse?? Pke comme vous pouvez vous en douter, ce n'est pas une dll dévouée à Toto que je souhaite executer...

    D'avance Merci!!

    Mastein

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Les Long dans les dernières version ne correspondent pas aux Long du VBA d'excel.
    Essaye un peu en mettant des Integer dans ta dll Integer en .Net correspondent aux Long de Excel.
    Long en VBA = 32bits.. Integer en .Net = 32bits et long = 64bits
    A+

  3. #3
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut euh...
    Sauf erreur de ma part, dans ma dll (code C++) j'ai bien des Integers qui apparaissent... et aucun Long.

    Cependant, j'ai tout de même essayer de remplacer le code VBA par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Declare Function Toto Lib "ViableVix_dll.dll" (ByVal x As Long, ByVal y As Long) As Long
     
    Private Sub RunCalibration_Click()
    i = Toto(CInt(ActiveSheet.Range("nb_x").Value), CInt(ActiveSheet.Range("nb_reels").Value))
    MsgBox (Str(i))
     
    End Sub
    Mais ça n'a rien changé...

  4. #4
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut un truc incompréhensible...
    Donc voilà, j'ai refait un projet tout neuf, et tout vide, et j'y ai inséré exactement le code donné si dessus (tout en haut).
    Là, aucun problème, tout marche du feu de Dieu...
    Cependant quand je "noie" mon code C++ dans un véritable projet.. ben là tout part de travers.. bien que mon code compile parfaitement...
    C'est à devenir fou, je n'y comprend rien...

  5. #5
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut En définitive...
    J'en ai eu tellement marre, que j'ai copié directement le code du projet (reel, pas de toto) qui ne marchait pas dans celui qui marchait... et le monde est devenu merveilleux. Tout marche donc pour le mieux.

    En conclusion, je pense qu'une option de compilation devait être coché dans un des projet et pas dans l'autre....
    Rhaaa.. les bons Makefile... ils me manquent si vous saviez à quel point!

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

Discussions similaires

  1. [C#] Définir un point d'entrée pour une dll en c#
    Par electro74 dans le forum Débuter
    Réponses: 1
    Dernier message: 26/01/2014, 21h44
  2. Définition du point d'entrée sur une DLL C++
    Par Fëanor 06 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 19/04/2010, 16h49
  3. Réponses: 10
    Dernier message: 09/11/2008, 21h09
  4. [access 2003] erreur d'execution 3137, point virgule absent
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/02/2008, 09h41
  5. Point d'entrée d'une DLL et Variable globale
    Par David Fouejio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/06/2007, 11h43

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