none
problème dll vba-c++ RRS feed

  • Question

  • Bonjour à tous,

    Je souhaite réaliser des programmes ou j'appelle une dll crée via visual studio en C++ pour un client VBA-Excel. J'essaie donc de commencer par un programme tout simple et d'appliquer les tutoriaux que j'ai vu sur internet sur le sujet.

    Ici, mon programme VBA va prendre un nombre dans une case excel (7.1 par exemple) et appeler la dll qui va multiplier ce nombre par 2. On veut donc avoir au sortir de la macro VBA le nombre 14.2.....

    Je crée donc une console Win32 dans VStudio en mode "dll" vide. Je crée un .cpp qui prend un double en entrée et renvoie cette somme multipliée par 2:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>

    double multip(double a)
    {
        return 2*a;
    }


    Puis je crée un .def:

    LIBRARY    "projet_test5"
    EXPORTS
    multip @1

    Je compile, j'obtiens un .dll et un .lib au path suivant:
    "C:\Documents and Settings\ut15q5\Desktop\prog\projet_test2\debug\projet_test5.dll"



    Puis dans Excel, j'écris ceci:

    Private Declare Function multip Lib "C:\Documents and Settings\ut15q5\Desktop\prog\projet_test2\debug\projet_test5.dll" _
    (ByVal n As Double) As Double

    Public Function mult() As Double
        mult = multip(Cells(9, 10).Value)
    End Function

    ET JE RECOIS COMME ERREUR EN VOULANT COMPILER:
    "Run Time error '49':
    Bad DLL calling convention"

    Les arguments sont pourtant bien les mêmes. Qu'est-ce qui ne va pas ?

    Merci d'avance!
    lundi 20 juillet 2009 16:27

Toutes les réponses

  • salut worpal! et bonjour tout le monde...

    moi aussi galère à créer des dll...
    néanmoins, je pense qu'il te manque déjà un _stdcall ou un externe "C" dans ta déclaration de multip. Essaye ça :

    double _stdcall  multip(double a)
    {
        return 2*a;
    }

    il ne me reste qu'une question, moi quand je compile, je n'ai qu'un .dll, et pas de .lib. J'utilise VC++ Express 2008.
    Et moi mon erreur est : Point d'entree d'une dll introuvable.
    si par hasard quelqu'un avait une idée...
    J'ai suivi pas à pas la tuto  suivante :
    http://logix4u.net/Programming/vc++/A_Tutorial_on_creating_DLLs_with_VC++.html

    d'avance merci!!
    lundi 27 juillet 2009 15:35