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

C++ Discussion :

Padding mémoire VBA / C++


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Par défaut Padding mémoire VBA / C++
    Bonjour,

    Je rencontre un problème en voulant utiliser des structure an argument de fonction entre une dll C++ et le VBA.
    J'utilise visual studio 2010.

    Code C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct ms
    {
    	int a;
    	double b;
    };
     
    __declspec(dllexport) double __stdcall  Cpp_Test(ms *i)
    {
    	return i->a + i->b;
    }
    Code VBA
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Declare PtrSafe Function Cpp_Test Lib "MyDLL.dll" (i As ms) As Double
     
    Type ms
        a As Long
        b As Double
    End Type
     
    Sub Test()
        Dim i As ms
        i.a = 12
        i.b = 3.14
        MsgBox Cpp_Test(i)
    End Sub

    Cela ne marche pas car je perd ma valeur de b. J'ai le sentiment qu'il y a un problème d'alignement et je n'arrive pas à le régler.
    J'ai essayé d'utiliser le mot clef: sur ma structure mais ça ne change rien.

    Auriez-vous une idée du problème et comment le résoudre s'il vous plaît?

    Merci!

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    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 464
    Par défaut
    Auriez-vous une idée du problème et comment le résoudre s'il vous plaît?
    En utilisant COM, c'est fait pour ça.

    Les layouts mémoire entre VBA et C++ n'ont rien de commun entre eux, et le layout du C++ est variable ad nauseam par les options de compilation, les versions des compilateurs, et sans compter le layout de VB qui peut changer à chaque version du moteur d'exécution.

    La seule solution pérenne est de passé par un layout non ambiguë entre les 2 runtimes/langages.

    Et COM est fait pour, et dispose des outils dédiés.

    Mais la courbe d'apprentissage de COM est raide (encore plus maintenant avec le manque de référence complète sur cette technologie obsolète (comme VBA d'ailleurs)).

    Si c'est pour faire passer une malheureuse structure avec 2 pauvres champs, le plus simple serait de changer la signature pour faire passer ces 2 champs sous forme de 2 paramètres distincts.

    Sinon, il faut définir les structures échangées dans une type-librairie en les définissants un fichier IDL.
    Puis utiliser les dédiés de VBA et de C++ pour se servir de ces types COM.

    Mais, bon, faudrait quand même pensé à laisse VBA reposer en paix (RIP).

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Par défaut
    Merci pour les informations.
    Je passe plus de 2 arguments d'ou l’intérêt des structures.
    Après plusieurs tests, j'ai pu trouver l'alignement. Je mets donc l'alignement depuis Visual a 4 octets et mes données restent intègre.

    Effectivement, la courbe d'apprentissage sur les objets COM est grande!

    Malheureusement je ne peux pas me passer du VBA et il lui reste encore quelques années à survivre

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    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 464
    Par défaut
    Malheureusement je ne peux pas me passer du VBA et il lui reste encore quelques années à survivre
    Utilisez COM.

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

Discussions similaires

  1. [XL-2013] Aide mémoire VBA
    Par nibledispo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/09/2013, 15h13
  2. Problème de Mémoire VBA WORD Mac G5 5go Ram
    Par kitcreanet dans le forum VBA Word
    Réponses: 2
    Dernier message: 28/08/2006, 12h08
  3. [VBA-E]Allocation de mémoire aux variables
    Par DomBourti dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 05/05/2006, 21h57
  4. [VBA-E]QueryTable et utilisation mémoire
    Par Pgs dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2006, 09h19
  5. [VBA-E] Saturation de la mémoire car trop de macros activées
    Par MrYoYo dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/12/2005, 19h01

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