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++

  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 397
    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 397
    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 397
    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 397
    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 503
    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 503
    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 397
    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 397
    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 503
    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 503
    Par d�faut
    Un petit probl�me entre les type VBA et les types C++ ?
    http://www.drivenbysteam.com/?p=158

  10. #10
    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
    En suivant les instructions pr�sentent dans votre lien, j'ai modifier le type de variable de la mani�re suivante: (transformation des integer en long dans le VBA).

    Code VBA : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Declare PtrSafe Function square Lib "C:\Users\hadrien\Documents\Visual Studio 2013\Projects\essai lecture dll\Win32Project5\DLL_VBA2.dll" (ByVal x As Long) As Long
     
        Sub test()
        Dim a As Long
        Dim b As Long
        a = 5
        b = square(a)
        End Sub

    Malheureusement, j'obtiens toujours le m�me message d'erreur me disant que le dll est introuvable
    Je n'aurais jamais imagin� que quelque chose d'aussi "simple" serait si longue � mettre en place.

    Auriez vous d'autres suggestions ?

  11. #11
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    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 503
    Par d�faut
    On va faire dans le bourrin.
    Utilisez un outil comme processmonitor (http://technet.microsoft.com/fr-fr/s.../bb896645.aspx) pour voir o� le programme cherche cette Dll.
    Moi, je ne suis pas sur qu'on puisse donner le chemin complet de la Dll dans le Declare.

  12. #12
    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
    Bonjour,

    excusez moi pour le retard sur le post.
    Conform�ment � vos conseil, j'ai utilis� process monitor et j'obtiens l'erreur le log suivant:
    Nom : log process monitor.JPG
Affichages : 318
Taille : 88,9 Ko

    donc a priori, il essai bien d'atteindre la dll mais � priori l'ouverture ne fonctionne pas.

    En essayant de rajouter la dll en r�f�rence VBA mais j'obtiens le message d'erreur suivant:
    "impossible d'ajouter la r�f�rence sp�cifi�e"

    En regardant sur le net, j'ai �galement essayer la commande regsvr32 dans l'invite de commandes et j'ai le message suivant:
    Nom : log regsvr32.JPG
Affichages : 315
Taille : 15,6 Ko

    Enfin bref, j'essaye tout et rien ne marche sniff

  13. #13
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    regsvr32 c'est pour les DLLs COM. Malheureusement ta DLL est une DLL ordinaire, et non pas un composant COM.
    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.

  14. #14
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    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 503
    Par d�faut
    donc a priori, il essai bien d'atteindre la dll
    On s'en fout de l'apriori, on utilise la m�thode bourrin.
    Donc faut lire le r�sultat des appels, et c'est les colonnes que vous n'avez pas donn�es (ainsi que les colonnes avec les param�tres).
    Sans ces valeurs, on ne peut faire que des hypoth�ses.
    Au vue des requ�tes, j'ai juste l'impression soit que VB v�rifie que le fichier est verrouill�/verrouillable en lecture seul, soit qu'il ne lit que l'en-t�te du fichier pour soit voir la compatibilit� de la dll soit l'existence du point d'entr� demand�.

  15. #15
    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
    Voil� les infos compl�tes:

    Nom : log process monitor.JPG
Affichages : 324
Taille : 108,7 Ko

    et voici le d�tails de la derni�re colonne pour la requ�te refus�e:
    Sync type: Sync typecreate section Page protection

  16. #16
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    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 503
    Par d�faut
    Le fichier est bien charg� dans votre ex�cutable.
    V�rifiez la compatibilit� de votre dll avec celui de l'ex�cutable, 32/64 bits etc...
    Utilisez l'EventViewer pour avoir des indices sur le probl�me.

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