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 :

[Debutant?] Passage d'une string entre VB et VC++


Sujet :

MFC

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut [Debutant?] Passage d'une string entre VB et VC++
    Bonjour tout le monde,

    J'ai un probleme (forcement).
    Pour aider une copine dans son projet, j'essaie de resoudre ses problemes dans son code. Mais je seche sur ce qui suit.

    Sous VB, on a une form toute bete ou l'on charge un fichier.
    Consecutivement, on cree un objet (defini sous VC++) et on l'initialise. La methode d'initialisation est toute simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        set Don = CreateObject("Statistiques.Donnees")
        a = Don.importDonnees(ligne, colonne, fileCPlusPlus)
    ou ligne, colonne sont des entiers et fileCPlusPlus est une string (contenant le chemin du fichier avec double "\\").

    Quand je "lance" la form VB, j'ouvre le fichier et j'obtiens le message d'erreur suivant:
    Object doesn't support this property or method
    Je suis assez perplexe. Sous VC++, la fonction d'initialisation est definie comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double Donnees::importDonnees(short nbligneD, short nbcolD, CString chemin)
    Est ce que quelqu'un peut m'aider. J'ai la vague impression que ce n'est rien de compliqué. La finalite de la chose etant, je le rappelle, de passer le chemin du fichier CSV ouvert par la form VB pour que VC++ l'ouvre et fasse un traitement des donnees (moyenne, variance, khideux...).

    Merci d'avance et bonne année!

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    pour la communication de chaine en ActiveX/Com, il faut utiliser des BSTR

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Appel sous VB
    Merci pour l'info (je dois bien dire qu'il n'est pas evident de trouver des bonnes sources d'infos pour VC++...).

    Bon, j'ai modifie mon code VC++. J'ai un beau BSTR pour la classe. J'ai meme prepare la fonction permettant de transformer un BSTR en char * afin de l'utiliser pour ouvrir mon fichier.

    Malheureusement, j'ai toujours le meme message sous VB... (Je n'ai pas change le code).

    Object doesn't support this property or method
    J'ai cru comprendre qu'il fallait plutot passer l'adresse de depart de la chaine. Est ce que ce serait pas ca mon probleme, maintenant? Si oui, comment faire?

    Merci encore!!

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    si tu n'as pas encore changé les méthodes d'accès à ton activeX, il doit croire encore que c'est l'ancien prototype
    Cette méthode est-elle publique ? comment est-elle ajoutée dans l'activeX ? (utilisation de classWizard ?)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Concernant les methodes d'acces a mon ActiveX, je n'ai rien touche donc, j'imagine que ta supposition est vraie... Tu peux expliquer comment on fait (je suis desole mais je n'ai jamais fait de lien VB - VC++).

    Sinon, concernant la methode importDonnees, elle est privée.

    Bon, je dois bien avouer que je suis un peu a la rue... Je m'en doutais deja mais la, ca me le confirme!

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    bon, alors, ca ne se passe pas comme ca pour utiliser une méthode dans ton ActiveX depuis VB.

    Là, VB il voit rien, pour ca il faut définir une interface pour que VB puisse savoir qu'il existe une telle fonction.

    Là, telle qu'est faite importDonnees, elle est visibile uniquement par l'objet C++ privé.

    Il te faut utiliser le classwizard pour générer une nouvelle méthode publique depuis l'extérieur

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut ClassWizzard
    Merci de m'eclairer de la sorte...

    Bon, j'ai ouvert le dit ClassWizzard depuis VC++. Et la, bam!

    Parsing error: "BSTR" is not a valid OLE parameter type"
    Ca ne semble pas encore gagné. J'attaque les recherches Internet sur le message d'erreur!

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    alors,
    avec VC 6 :

    view --> classwizard --> onglet automation --> choisir sa classe de control dans class name --> add method --> external name (nom à voir depuis l'exterieur : importDonnees) --> return type BSTR --> et ajouter les paramètres s'il y en a

    ensuite il te genere la méthode, tu n'as plus qu'à aller mettre ton code dedans

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci, ca a l'air de marcher. Grace a tes indications precieuses, j'ai compris un peu mieux comment faire le lien VB-VC++.

    Bon, il ne me reste plus qu'a trouver le moyen de lire le fichier CSV. Mais ca ne doit pas etre le plus compliqué, je pense (j'espère). Enfin, ce sera pour demain, parce que la, il est tard et je commence a fatiguer apres ces bonnes heures de galere!

    Merci encore.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Decidemment
    Maintenant que j'ai fini les modifs qui marchent nickel chez moi, on a un nouveau probleme.

    J'ai renvoye mes sources a ma copine a Paris et la, ca ne marche pas chez elle. Elle se prend le message suivant lorsque VB essaie d'utiliser une methode VC++:

    wrong nuber of argument or invalid property of assignment
    Bon, j'ai vagument l'impression que c'est encore un probleme de lien entre le VB et le VC++. Sachant que lorsqu'elle m'a envoye ses sources, la methode VC++ avait moins de parametres que maintenant.

    Est ce qu'il faut modifier quelque chose sous VB ou VC++ chez elle? On a deja recompile les sources, toucher a ClassWizzard mais rien... Quelqu'un a une idee?

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bon, mes craintes etaient confirmees. En fait, la petite n'avait pas re-buildé la DLL.... C'est fait et ca marche!

    Désolé...

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Appel constructeur depuis VB
    Eh oui, c'est re-moi.
    Bon, le probleme est different. Je dirais, plus general.

    En fait, apres avoir reussi a gerer la fonction d'initialisation de l'objet, je me demande s'il est impossible de faire autrement. Je veux dire: ne pas passer par une fonction d'initialisation.

    Je m'explique. On a l'objet sous VB qui est bon. Et on veut initialiser son equivalent sous VC++. On ne pas appeler le constructeur de la classe depuis VB?

    Je ne sais pas si c'est clair... Pour moi, c'est evident que ca doit etre possible mais, comme je l'ai deja maintes fois repete, je suis tres debutant (niveau bas) pour tout ce qui est lien VB/VC++.

    Merci d'avance a tout ceux qui accepteront de me consacrer un peu de temps!

  13. #13
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim obj as New MonObjetVC
    , il va alors appeler le constructeur de l'objet écrit en VC++
    mais il faut que ce soit le constructeur par défaut

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Appel constructeur depuis VB avec parametres
    Hmmm...
    Dans notre cas MonObjetVC est, ni plus, ni moins qu'un tableau dont les valeurs sont recuperees a partir d'un fichier (que l'on ouvre via l'interface VB).

    Est ce que l'on peut alors ecrire sous VB?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim obj as New MonObjetVC(cheminFichier)
    En considerant que le constructeur accepte un parametre et qu'il gere le traitement du fichier (initialisation du tableau)?

    Il faut juste que ce soit le constructeur par défaut?

  15. #15
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il aurait fallu que je puisse vérifier, mais dans mes souvenirs, j'avais été obligé de rajouter une méthode après pour faire l'initialisation, vu que je ne pouvais utiliser que le constructeur par défaut.

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    été obligé de rajouter une méthode après pour faire l'initialisation, vu que je ne pouvais utiliser que le constructeur par défaut
    C'est ce que l'on a fait auparavant. Donc, je pense que l'on va faire de meme. C'etait juste histoire de voir si l'on ne pouvait pas alléger la chose.
    Merci en tout cas.

Discussions similaires

  1. [Debutant] Passage d'une variable
    Par diaboloche dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/09/2007, 09h42
  2. Réponses: 4
    Dernier message: 11/04/2007, 12h49
  3. Passage d'une String[] en argument.
    Par Empty_body dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2007, 14h41
  4. [Debutant] extraction d'une string
    Par adilou1981 dans le forum Langage
    Réponses: 5
    Dernier message: 28/06/2005, 09h54
  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