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 :

passer une string Excel VBA vers C++


Sujet :

Visual C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut passer une string Excel VBA vers C++
    bonjour.

    j'�cris des petites fonctions en C++ que je wrappe dans des DLLs pour les utiliser avec excel.

    avec des variables C++ (int, double, long, ...) et Excel (Double, Integer, .. ) [avec des 'chiffres', quoi!], je code sans probl�me.

    en revanche, je ne parviens pas � utiliser une String de VBA vers C++ , je choisis de la passer ByVal.

    le livre de steve dalton donne la r�ponse � ma question, mais je ne sais pas quoi faire avec les explications du bonhomme !

    Quand elle est pass�e BYVal vers C++, la String de VBA arrive comme une BSTR ... vous pouvez d�clarer votre argument comme un char* , ce qui a pour effet de caster le pointeur directement vers l'espace-m�moire allou� � la BSTR
    un petit code d'illustration, en-dessous. si quelqu'un a la gentillesse de corriger. je ne sais que faire des BSTR ? char* ? ref�rencement et d�-f�rencement ??


    code C++
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    double __stdcall maFonction(BSTR couleur)
    {
    	double resultat;
    	if ('rouge' == couleur)
    		resultat = 3.7999;
    	else
    		resultat = 5.455;
    	return resultat;
    }
    Appel de fonction en VBA
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    Declare Function maFonction Lib "C:\ .... majoliefonction.dll" _
    (ByVal couleur As String) As Double
    merci de votre aide.
    �douard

  2. #2
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par d�faut
    Salut,

    Je ne connais pas du tout VBA mais apparemment un BSTR peut se caster en char*. Mais, pour comparer 2 char* en C il faut utiliser strcmp (et pas == qui ferait juste une comparaison du pointeur, et nom de la chaine). Enfin, �a donnerait quelque chose comme �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    double __stdcall maFonction(BSTR couleur)
    {
    	double resultat;
    	if ( strcmp("rouge",  (char*)couleur) == 0)
    		resultat = 3.7999;
    	else
    		resultat = 5.455;
    	return resultat;
    }
    Petit pi�ge, strcmp ne revois pas vrai ou faux, mais la "diff�rence" entre les 2 cha�nes (donc diff�rence = 0 <=> 2 cha�nes sont �gales).
    Juste une chose, c'est peut �tre juste une erreur de frappe de ta part, mais une chaine s'�crit entre " (double quote) et non entre ' (simple quote).

    En esp�rant que �a t'aidera.

    A+

  3. #3
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut
    merci pyros. je regarde ceci, illico !
    je vous tiens au courant ....

  4. #4
    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
    Petite pr�cision, le B de BSTR, c'est pour Basic.
    Donc l'int�gration d'une cha�ne VBA via BSTR est ce qu'il y a de plus "naturel".
    http://msdn.microsoft.com/en-us/library/ms221069.aspx

    Mais, il y a quelques "petites" embrouilles inh�rentes au format.

    Primo, les cha�nes VBA sont toutes en UNICODE, donc votre comparaison avec une cha�ne "rouge" avec la fonction "strcmp", elle n'est pas pr�te de retourner 0.

    Il faut utiliser des cha�nes et des fonctions UNICODE type L"rouge" � la place de "rouge" et les fonctions qui vont avec.
    Voici quelques exemples de manipulations de cha�nes BSTR en C/C++. (Attention, il est plus prudent d'utiliser la MACRO "L" que "_T" de leurs exemples):
    http://www.codeproject.com/KB/string/bstrsproject1.aspx

    Et utiliser la classe _bstr, qui simplifie grandement le triturage de cha�ne au format BSTR.
    http://msdn.microsoft.com/en-us/libr...d6(VS.71).aspx

    Dont les comparaisons :
    http://msdn.microsoft.com/en-us/libr...(v=VS.71).aspx

    Secondo, comme le montre ce lien :
    http://msdn.microsoft.com/en-us/library/ms221069.aspx
    Une cha�ne BSTR a une repr�sentation en m�moire bien plus complexe qu'une cha�ne C (mais bien moins qu'une cha�ne std:string du C++ ).
    Donc
    ce qui a pour effet de caster le pointeur directement vers l'espace-m�moire allou� � la BSTR
    c'est que le pointeur sera sur le "Length prefix" d'un BSTR et pas sur le d�but de la cha�ne UNICODE contenue dans la BSTR.

  5. #5
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut
    merci pour toutes ces sources d'info !
    je dig�re et je vous dis ...

  6. #6
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut
    en fait, je me suis laiss� aller � lire le tout et d'autres choses WideCharToMultiByte et j'avoue que je ne vois toujours pas comment m'en sortir avec mon petit example de code.

Discussions similaires

  1. passer une variable excel � access en vba
    Par fafaf dans le forum Access
    R�ponses: 2
    Dernier message: 22/07/2015, 15h16
  2. passer une feuille excel dans un fonction
    Par LeXo dans le forum VB 6 et ant�rieur
    R�ponses: 1
    Dernier message: 02/12/2006, 00h08
  3. [VB Project] Excel Vba vers Microsoft Project
    Par Mut dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 12/10/2006, 12h06
  4. passer une String en param�tre
    Par fabhxc dans le forum Langage
    R�ponses: 11
    Dernier message: 28/12/2005, 15h46
  5. R�ponses: 1
    Dernier message: 15/04/2005, 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