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

MFC Discussion :

VARIANT C++


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut VARIANT C++
    Bonjour
    J4utilise C++ dans une dll avec une interface COM pour que mes fonctions et mes objets soient appelables depuis VBA.
    J'ai une fonction qui doit renvoyer une matrice. Je dois donc transformer cette matrice de double en variant avant de la renvoyer à VB.
    Est-ce que qqun a une idée sur comment faire??
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Par défaut
    il faut faire une boucle!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void (double ** matrice,VARIANT**matrice_variant,int largeur_matrice,int longueur_matrice)
    {
     
    int a = 0;
    int b = 0;
    for( a=0;a<longueur_matrice;a++)
    {
      for( b=0;b<largeur_matrice;b++)
      {
          matrice_variant[a][b].vt = VT_R8;
          matrice_variant[a][b].dblVal =   matrice[a][b].
      }
    }
     
    }

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    merci..
    Mais est ce qu'il n'y a pas de phase d'initialisation??
    Si je n'avais pas reçu matrice_variant en argument de la fonction, comment aurais-je dû le créer à l'intèrieur de celle-ci?
    merci encore

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    VARIANT n'est pas un type C++ standard. Tu utilises quel compilo / bibliothèque ?
    Il faut utiliser un SAFEARRAY.
    http://rp.developpez.com/vb/tutoriels/dll/
    http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q207931
    http://www.codeguru.com/Cpp/COM-Tech/activex/com/article.php/c2575/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    J'utilise Visual C++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Par défaut
    il faut allouer de la mémoire à to matrice de variant...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    oui, mais est-ce qu'il y a moyen d'allouer de la mémoire à une matrice de variant sans passer par les safearray et toute la syntaxe compliquée qui va avec..
    Qualles sont les commandes minimales pour faire cette initialisation?
    merci

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    VB attend un SAFEARRAY...
    Ton programme VB possède son propre espace d'adressage. Tout ce que tu alloues est propre à ton process, le prog VB ne peut pas y accéder. COM et SAFEARRAY s'occupent de partager les données. Tu peux utiliser une classe qui encapsule le SAFEARRAY, mais il te faut utiliser un SAFEARRAY...
    L'exemple sur codeguru initialise un SAFEARRAY de float à 2 dimensions.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    J'ai fait en créant des safearray,
    ce code compile mais ne marche pas..
    De l'aide ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    STDMETHODIMP CIFCPricerCOM::Getvariant(VARIANT *hauteur)
    {
    	int i,j;
    	SAFEARRAYBOUND rgsabound[10];
    	for (i=0; i< 10; i++){
    		rgsabound[i].lLbound = 0;
    		rgsabound[i].cElements = 9;
    	}
    	VariantInit(hauteur);
     
        hauteur->vt = VT_VARIANT | VT_ARRAY;
        hauteur->parray = SafeArrayCreate(VT_VARIANT,10,rgsabound);
        long position[2];
    	for (i=0; i< 10; i++){
    		for (j=0; j< 10; j++){
    			position[0] = i;
    			position[1] = j;
    			CComVariant variant1(15);
    			SafeArrayPutElement(hauteur->parray,position,&variant1);
    		}
    	}
     
     
    	return S_OK;
     
    }

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut


    Là tu crées un tableau à 10 dimensions:
    10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    oui, je crée ce tableau, et j'y mets des 15 partout.
    Je m'attends à avoir en sortie une matrice 10*10 avec des 15 ârtout
    mais je n'ai rien en sortie..
    Quand je me mets en debug et que je mets un spy sur mon safearray, plusieurs de ses champs ne sont pas évalués..
    Une idée?

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Je m'attends à avoir en sortie une matrice 10*10
    Non... une matrice, c'est 2 dimensions. Tu en crées 10, soit une matrice de matrices de matrices de matrices de matrices...

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Thanks a lot..
    J'y arrive finalement

Discussions similaires

  1. Variante de TUpDown avec incrément réel
    Par Bernard Grosdoy dans le forum Composants VCL
    Réponses: 6
    Dernier message: 20/10/2004, 16h40
  2. Transtypage d'un variant.
    Par Lodonez vincent dans le forum Langage
    Réponses: 4
    Dernier message: 02/09/2004, 19h42
  3. Champ Date à '01/01/0001' -> Pb conversion de variant !!!
    Par AnnSo dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/06/2004, 16h54
  4. conversion : VARIANT FAR* URL vers CString
    Par kam dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2004, 13h32
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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