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 :

#import Directive collision problem , error C2061


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut #import Directive collision problem , error C2061
    Bonjour,
    Je crois que j'ai un probleme de collision. Je m'explique.
    J'ai deux inetrfaces dans mon idl : Cars et Garage.
    Dans Garage j'ai deux proprietes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HRESULT Cars([out, retval] Cars** prop);
    HRESULT CarsForUser([in] Well well, [out, retval] Cars** prop);
    le tlh genere:

    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
    Garage : IDispatch
    {
    //
    // Property data
    //
    __declspec(property(get=GetCars))
    CarsPtr Cars;
    __declspec(property(get=GetCarsForUser))
    CarsPtr CarsForUser[];
    
    //
    // Wrapper methods for error-handling
    //
    CarsPtr GetCars ( );
    CarsPtr GetTrendsForUser (
    struct Well * Well );
    
    //
    // Raw methods provided by interface
    //
    
    virtual HRESULT __stdcall get_Cars (
    /*[out,retval]*/ struct Cars * * prop ) = 0;
    virtual HRESULT __stdcall get_CarsForUser (
    /*[in]*/ struct Well * Well,
    /*[out,retval]*/ struct Cars * * prop ) = 0;
    mon implementation dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    STDMETHOD(get_Cars)(Cars* * prop);
    STDMETHOD(get_CarsForSource)(Well * well,Cars * * prop); // error here
    j'obtiens: error C2061: syntax error : identifier 'Cars'

    Le probleme est que j'ai une double definition de "Cars":
    une dans mon inteface (coloré en bleu)
    et une dans le tlh généré: en rouge

    J 'ai essayé plusieurs options dans le stdafx.h
    rename("Cars","CarsX")
    mais ca donne rien

    J'ai renommé mon idl Cars en CarsX et la ca marche...mais bien entendu je veux utiliser le nom
    Cars et nonCarsX

    Ma question :
    Y a t il une solution a ce probleme? en fait j'aimerais trouver
    soit :
    1- le moyen de renommer Cars du tlh
    2- soit de que la compilation ne genere pas les Property data mais seulement les Wrapper methods for error-handling

    une idée? merci!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Désolé, là je ne vois pas trop.
    À ta place, j'aurais appelé les interfaces ICars et IGarage, rendant tout conflit impossible...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut zut...
    aie...
    le probleme est que le nom de ces interfaces sont ensuite utilises en VB par exemple.
    Il faut que l'utilistateur puisse voir le nom Cars et non ICars...
    Il doit y avoir une solution, danx excel par exemple il y a pleins de fonctions qui fonctionnent de la meme maniere, exemple : pour les sheets ils y a d'autres interfaces qui ont pour propriete sheets et apparament ca ne pose pas de probleme.
    J'ai essaye d'inclure le tlh dans mon projet et ensuite enlever les methodes generes qui posent probleme...mais pour l'instant ca ne marche pas.

    je suis completement bloque la...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    J'ai un soupçon soudain: Où est défini Well ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    dans l'idl
    exactement comme Cars et garage,
    j'en ai pas parle car cet objet n'est pas vraiment utile a mon probleme

    en fait tout peut compiler avec dans le stdafx.h:
    #import "../../Include/AutoApplication.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search

    mais pas avec:
    #import "../../Include/AutoApplication.tlb" no_implementation, no_namespace, named_guids

    et j'aimerais utiliser le second car celui ci genere les Property data
    que j'aimerais utiliser dans le code

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Fais un #import de Word (ou un truc du genre) et regarde comment c'est géré...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    ok je vais voir...
    mhh po evident!

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut je bloque...
    j'ai regarde le EXCEL9.OLB dans :
    C:\Program Files\Microsoft Office\Office

    notamment Sheets.
    bon moi j'utilise interface a la place de dispinterface
    mais ca doit pas etre ca.

    y a t il possibilite de regarder le code qui utilise ceci?
    j'ai des doutes...

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ah, ben si, je n'y pensais plus.
    Les objets Office n'existent pas en tant qu'interfaces réelles, donc tous les types utilisés sont des IDispatch...

    Donc, je réitère mon conseil: Pour de "vraies" interfaces normales ou duales, préfixe-les de "I". Réserve les noms sans "I" aux dispinterfaces.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut donc...
    je crois que c'est fichu...
    tant pis le code d'implementation est juste un peu mois lisible et joli...
    dommage

    merci pour ton aide et tes efforts

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut et..
    tant pis je suis obliger d'utiliser les raw methods...

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/05/2007, 09h46
  2. Importer directement des instructions MySQL en fichier texte dans MySQL
    Par lightstring4 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/05/2007, 16h39
  3. Import de DLL: fatal error C1083
    Par Philoubilou dans le forum C++
    Réponses: 1
    Dernier message: 24/04/2007, 16h22
  4. Probleme error 1064
    Par bobludovic dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/01/2007, 08h50
  5. Réponses: 3
    Dernier message: 26/10/2006, 18h21

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