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

Excel Discussion :

DLL en C++ dans VBA : Overflow [Toutes versions]


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut DLL en C++ dans VBA : Overflow
    Bonjour,
    Voici mon problème.
    J'utilise une DLL développée en C++ qui est une bibliothèque de calculs thermodynamiques via VBA pour Excel. Il s'agit d'une seule fonction avec une option "opt". Selon la valeur de l'option, l'unique fonction C appelle en réalité d'autres fonctions, de sorte que je peux choisir le type de calcul que je désire : masse volumique, facteur de compressibilité etc... d'où un résultat différent selon l'option.
    Certaines de ces fonctions marchent très bien.
    Par contre, l'une d'elle provoque un #VALUE dans ma cellule excel.
    En appelant ma fonction via une procédure sub(), j'obtiens un message d'erreur plus explicite : "Overflow".
    Par contre, en exécutant ma fonction C++ via mon EDI (DevC++), j'obtiens bien le résultat escompté que j'affiche avec printf.
    A noter que cette fonction contient un nombre assez important de tableaux de constantes déclarées en tant que tableaux de "double" (et non de "const double", j'aurais dû ?).
    Je ne savais pas trop si je devais poster ici ou sur un forum plus orienté langage C. Quelqu'un peut-il me donner une piste ?
    D'avance merci.

    Jean-Luc

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    Difficle à dire comme ça (je veux dire sans le code) mais l'overflow apparait en effet lorsque le dimensionnement (variable ou objet) n'est pas cohérent avec les données.
    Donc à priori le Double ne doit pas être le bon dimensionnement...

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    Citation Envoyé par Fvandermeulen Voir le message
    Salut,

    Difficle à dire comme ça (je veux dire sans le code) mais l'overflow apparait en effet lorsque le dimensionnement (variable ou objet) n'est pas cohérent avec les données.
    Donc à priori le Double ne doit pas être le bon dimensionnement...

    A+
    J'ai aussi essayé avec des const double et c'est le même constat. Le double paraît tout à fait adapté comme format aux données manipulées et je le rappelle : la fonction marche lorsque je crée un main() et que j'exécute ma fonction avec DevC++.
    Mais je pencherais plutôt pour un problème de mémoire : cette fonction, à la différence d'autres, fait intervenir un certain nombre de tableaux de 59 valeurs (des doubles) ainsi qu'un nombre important de variables.
    Dois-je scinder la fonction en plusieurs autres contenant chacune d'elles seulement quelques tableaux de doubles, dois-je recourir à un pointeur et un malloc afin d'attribuer de la place en mémoire à ces constantes ?
    Ou alors est-ce un problème calculatoire ? (valeurs très faibles ou très fortes, mais je ne vois pas car il n'y a pas de division, seulement des + - et *, et que les valeurs restent toutes très limitées : <1000)

    A+
    Jean-Luc

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut Problème résolu
    Re...
    Finalement j'ai résolu mon problème.
    Dans la fameuse fonction il y avait également un calcul d'incertitude utilisant un vecteur d'incertitudes de mesure. Je ne voulais pas utiliser a priori les résultats de ce calcul et j'avais éliminé des arguments de la fonction ce fameux vecteur. De toute façon, la fonction ne renvoie pas les résultats de ce calcul. Le problème c'est que le vecteur de départ n'était pas initialisé dans le corps de la fonction !
    Conclusion, dans DevC++ le vecteur est initialisé à des valeurs raisonnables (0 ?) mais pas dans l'environnement Excel, d'où des dépassements de capacité !

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

Discussions similaires

  1. DLL créée par delphi à utiliser dans VBA EXCEL
    Par AlfredKr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/03/2015, 08h29
  2. Utilisation d'une DLL dans VBA
    Par banjaman dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/03/2014, 15h20
  3. Error lancement dll dans VBA: Run-time error '28' - Out of stack space
    Par cfrelet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2010, 10h30
  4. [DLL C++ dans VBA Excel] Overflow
    Par materialguy7 dans le forum C++
    Réponses: 1
    Dernier message: 18/02/2010, 16h00
  5. Probleme utilisation un dll c# dans VBA
    Par Babylonne dans le forum Général VBA
    Réponses: 0
    Dernier message: 07/08/2009, 10h44

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