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

VC++ .NET Discussion :

Partage de mémoire entre VS 6 et VS 2008


Sujet :

VC++ .NET

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut Partage de mémoire entre VS 6 et VS 2008
    Bonjour tlm,

    J'ai une dll développée en VS C++ 6 et je veux l'utiliser en VS C++ 2008 pour développer un exe.

    Le problème est que je veux faire passer un pointeur sur une liste de string de la dll vers l'exe. Quand j'alloue la liste dans la dll, je ne peux pas y accéder dans l'exe et si je l'alloue dans l'exe je ne peux pas y accéder dans la dll (avec une erreur Access Violation).

    La méthode en question est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXPORT void __stdcall GetList(int Type  , char* Catid, list<char*, allocator <char*> > *pList);
    Est ce que quelqu'un aurait un idée comment résoudre ce problème?

    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
    Avec une liste STL, je dirais impossible vu que les CRT sont différentes.
    C'est une des raisons pour lesquelles il est déconseillé d'exposer des types de la CRT (ou des classes C++ en général) depuis une DLL.

    Mon conseil de retourner un pointeur vers une classe abstraite contenant uniquement des méthodes virtuelles (équivalent d'une interface, quoi) et au destructeur protected.

    Ou bien, la solution "extrême" et overkill, faire carrément un composant COM pour une liste de BSTR...

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Et si je migre ma dll vers VS 2008, vous pensez que le problème va se résoudre?

    Merci.

  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
    C'est possible. Mais tu auras à nouveau des problèmes quand Visual Studio 10 sortira...

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Oui, tu as raison, vaut mieux changer la méthode mnt. Je vais opter pour la solution classe.

    Merci.

  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
    C'est plutôt la solution Interface.
    N'oublie pas: Toutes les fonctions doivent être virtuelles pures, comme ça elles seront accédées par pointeur et non par nom.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    T'aurais une exemple?

  8. #8
    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

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Finalement j'ai utilisé un double pointeur sur BSTR et ça marche très bien.

    Mnt, mon problème est de faire passer une structure d'arbre de VS 6 vers VS 9. La classe que j'utilise est la suivante:

    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
    class BrowseStruct
    {
    public:
    	BrowseStruct();
    	BrowseStruct(BrowseStruct *);
    	BrowseStruct(char *_sName); 
    	~BrowseStruct(); 
     
    	char*         GetName();
    	void          SetName(char*);
    	int           GetNbNode ();
    	int           GetNbLeaf ();
    	BrowseStruct  GetNodeAt (int);
    	BrowseStruct  GetNode (char* name);
    	char*         GetLeafAt (int);
    	void          AddNode(BrowseStruct*);
    	void          AddLeaf(char*);
     
    public:  
    	char*       Name;    
    	int         nbNode;  
    	int         nbLeaf;  
    	list<BrowseStruct*, allocator<BrowseStruct*> > *NodeList;  
    	list<char*, allocator<char*> >  LeafList; 
    };

Discussions similaires

  1. Partage de mémoire entre classes
    Par julieng31 dans le forum C++
    Réponses: 12
    Dernier message: 01/10/2013, 23h15
  2. Partage de mémoire entre processus
    Par Didj7 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 25/05/2008, 23h33
  3. partage de mémoire entre excel et les autres
    Par potili2 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/09/2007, 15h08
  4. Partage de mémoire entre 2 exe
    Par ejaecker dans le forum Delphi
    Réponses: 12
    Dernier message: 09/09/2006, 15h03
  5. Partage de blocs mémoire entre 2 processus
    Par rolkA dans le forum Windows
    Réponses: 6
    Dernier message: 18/11/2003, 19h08

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