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

Visual C++ Discussion :

Dll C++ pour VBA


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 9
    Par défaut Dll C++ pour VBA
    Bonjour,

    je suis débutant en C++ et j'aimerais pouvoir accélérer mes programmes VBA en créant des fonctions en C++(utilisable une dll).
    Il y a énormement de chose sur internet sur la création de dll mais après avoir crée ma dll, j'ai une erreur VBA "erreur 53 - dll introuvable" que je n'arrive absolument pas à comprendre


    voici le code de la dll (fonction square)

    // fichier square.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "square.h"
     
    int __stdcall square(int x)
    {
    	return x*x;
    }
    j'ai ensuite crée un fichier de définition
    \\ DefFile.def

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LIBRARY "DLL_VBA2"
    EXPORTS 
    square
    et un fichier d'en-tete

    \\square.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define export __declspec (dllexport) 
    export int __stdcall square(int);
    La dll est alors générée et voila le code VBA pour l'appeler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Declare PtrSafe Function square Lib "C:\DLL_VBA2.dll" (ByVal x As Integer) As Integer
        Sub test()
        Dim a As Integer
        Dim b As Integer
        a = 5
        b = square(a)
        End Sub
    Avec dependency walker, la fonction square contenue dans la dll est visible mais voilà le log que je récupère:

    Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
    Error: Modules with different CPU types were found.

    Toute idée est la bienvenue

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    "different CPU Types" ça sent le problème de 64 bits, ça...
    Attends, le Depends, tu l'as fait sur quoi? La DLL ou le VB?
    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
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 9
    Par défaut
    j'ai utilisé dependency walker sur la dll.

    En essayant de compiler aussi bien en win32 qu'en x64, j'obtiens les mêmes logs.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans quel répertoire mets-tu la DLL? Je n'ai aucune idée d'où VBA tape.
    Voir aussi si tu peux la mettre dans un répertoire dans le PATH (ne pas oublier de quitter et relancer VBA si tu changes la variable d'environnement).
    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.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Moi, j'aurai pas fait une dll C++ Win32.
    J'aurai fait une Dll C++ COM, ça facilite grandement l'intégration entre VBA et le code C++.
    Mais bon, faut connaitre COM et c'est pas une mince affaire.

    Win32 c'est une API pour l'OS, aussi bien en 64 bits qu'en 32bits.

    Le message d'erreur suggère un problème de compatibilité binaire entre l'exécutable et la dll.

    Votre processus hôte de votre VBA est-il en 32bits ou en 64bits ?
    IA32/64 ou x86-64 ?
    ...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense qu'on peut ignorer le message d'erreur sur le CPU, s'il provient d'un simple Depends sur la DLL seule.

    @hadGP: As-tu fait un programme de test en C++ qui utilise la DLL?
    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.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 9
    Par défaut
    je viens juste de le faire et la dll fonctionne très bien
    c'est vraiment juste le passage en VBA qui bug

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2014
    Messages : 9
    Par défaut
    @Medinoc: lors de la déclaration de la dll en VBA j'indique le path, dans mon cas pour simplifier je l'ai mis sur la racine C:\
    j'ai également essayer de la mettre dans system32 mais le message d'erreur persiste.

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare PtrSafe Function square Lib "C:\DLL_VBA2.dll" (ByVal x As Integer) As Integer

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Un petit problème entre les type VBA et les types C++ ?
    http://www.drivenbysteam.com/?p=158

Discussions similaires

  1. [Débutant] dll VB.NET pour VBA
    Par issoram dans le forum VB.NET
    Réponses: 7
    Dernier message: 26/09/2013, 20h42
  2. dll C++ pour VBA : erreur 49 et 453
    Par EL0807 dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2006, 23h01
  3. DLL C++ pour VB 6?
    Par blackghost dans le forum MFC
    Réponses: 7
    Dernier message: 18/07/2005, 01h25
  4. dll builder pour projet visual...?
    Par iznotek dans le forum C++Builder
    Réponses: 8
    Dernier message: 12/01/2005, 19h27
  5. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30

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