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

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Déclarer une variable du tas gc qui ait une durée de vie de l'initiation de la classe à sa fin de vie: Visual
    Bonjour.

    Je dois déclarer une variable du tas gc qui ait une durée de vie de l'initiation de la classe à sa fin de vie et qui soit visible dans la classe
    J'ai deux objets dont la déclaration me pose problème:

    il s'agit de:
    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
     
    namespace Word = Microsoft::Office::Interop::Word;
     
     
    	Word::_Application^                      objApplication;
    	Word::Document^                          objDocument;
     
    	CWManager::CWManager()
    	{
    	}
     
    	CWManager::~CWManager()
    	{
    	}
    	erc CWManager::GetNbWords()
    	{
    		return(ulNbWord);
    	}
    	erc CWManager::StartReader(enDocType DocType, Word::Document^ objDocument)
    	{
    		objApplication = gcnew Word::Application;
    		objDocument = gcnew Word::Document;
    		return(0);
    	}
    tels qu'il sont présentés: j'ai un message d'erreur non ambigu du compilateur: impossible de déclarer une variable globale ou statique, ou un membre d'un type natif faisant référence à des objets du tas gc. Les objets sont crée dans la méthode StartReader, ce qui est conforme à la demande
    et donc ma question est comment déclarer une valriable du tas gc qui ait une duré de vie de l'initiation de la classe à sa fin de vie et qui soit visible dans toutes les méthodes de la classe

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    comment déclarer une valriable du tas gc qui ait une duré de vie de l'initiation de la classe à sa fin de vie et qui soit visible dans toutes les méthodes de la classe
    C'est ce qu'on apelle une variable membre.
    C'est interdit en managé ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut je découvre la définition d'une variable membre
    et je ne sais pas si c'est interdit
    mais il refuse Word::_Application* pApplication* = &objApplication;
    et également : System::Object* pApplication = &objApplication;

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Où en es-tu de l'apprentissage du langage ?

    Pourquoi une syntaxe avec * (pas toujours bien placée) alors que plus haut tu mets bien un ^ (qui est il me semble le pointeur managé) ?
    D'où sort objApplication dont tu espères prendre l'adresse ?
    objApplication serait un Word::_Application ? un System::Object ? décide-toi.

    Ta fonction prend un paramètre Word::Document^ objDocument qui est aussi le nom de la variable globale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClass
    {
     int m_int; // ceci est un membre
    };
    S'il refuse, il y a une raison. Et le message d'erreur est déjà un début de piste pour l'identifier.
    Bien qu'ici on peut l'imaginer aisément. Les globales sont interdites, soit. Mais ce que tu veux est un membre et non une globale, alors pourquoi déclarer une globale et non un membre ?
    Sais-tu déclarer un membre ? Sais-tu qu'une classe peut contenir autre chose que des fonctions membres, mais aussi des variables membres ?

    Et à vue de nez, sans jamais avoir fait de managé, la solution est surement très simple et un problème de déclaration. De la classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClassManage
    {
     Word::Document^ m_document;
    };
    Donc revois la base syntaxique du langage amha.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Je comprend la moitié
    J'ai modifié le code je le redonne donc
    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
    27
     
    namespace Word = Microsoft::Office::Interop::Word;
     
    	System::Object* pApplication = &objApplication;
     
     
    	CWManager::CWManager()
    	{
    	}
     
    	CWManager::~CWManager()
    	{
    	}
    	erc CWManager::GetNbWords()
    	{
    		return(ulNbWord);
    	}
    	erc CWManager::StartReader(enDocType DocType, std::wstring wsDocName)
    	{
    		Word::_Application^                      objApplication;
    		Word::Document^                          objDocument;
    		objApplication = gcnew Word::Application;
    		objDocument = gcnew Word::Document;
    		Word::OLEControlClass::Name = L"Word";
    		Word::OLEControlClass::Select();
    		return(0);
    	}
    et je reviens vers ton exemple
    Je code ça sur Visual Studion que je pratique depuis 5 mois
    avant j'étais sur BCB
    je ne sais pas ce qu'est le langage amha.
    et tous les objets ressortent avec le même diagnostique: impossible de déclarer une variable globale ou statique, ou un membre d'un type natif faisant référence à des objets du tas gc

    mais comme tous les essais donnent le même résultat je suis revenu à la première implémentation qui place les déclarations à l'endroit ou je voudrais les mettre:
    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
     
    	namespace Word = Microsoft::Office::Interop::Word;
     
    	Word::_Application^                      objApplication;
    	Word::Document^                          objDocument;
     
    	CWManager::CWManager()
    	{
    	}
     
    	CWManager::~CWManager()
    	{
    	}
    	erc CWManager::GetNbWords()
    	{
    		return(ulNbWord);
    	}
    	erc CWManager::StartReader(enDocType DocType, std::wstring wsDocName)
    	{
    		objApplication = gcnew Word::Application;
    		objDocument = gcnew Word::Document;
    		Word::OLEControlClass::Name = L"Word";
    		Word::OLEControlClass::Select();
    		return(0);
    	}

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Une simple recherche variable membre dans la FAQ donne déjà des résultats, mais encore faut-il la réaliser:
    http://dotnet.developpez.com/faq/cpp...ariableGlobale
    http://dotnet.developpez.com/faq/cpp...tic#initStatic
    http://dotnet.developpez.com/faq/cpp...=mixer#mixtype

    Cela dit, comprends-tu ce que j'ai écrit plus haut ?
    Comprends-tu ce que tu écris ?
    System::Object* pApplication = &objApplication; n'a absolument aucun sens.
    Pourquoi un pointeur classique ? d'où sort objApplication ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    erc CWManager::StartReader(enDocType DocType, std::wstring wsDocName)
    	{
    		Word::_Application^                      objApplication;
    		Word::Document^                          objDocument;
    		objApplication = gcnew Word::Application;
    		objDocument = gcnew Word::Document;
    		Word::OLEControlClass::Name = L"Word";
    		Word::OLEControlClass::Select();
    		return(0);
    	}
    Il a été dit dès la première réponse qu'il te faut une variable membre. Pourquoi déclarer tes variables dans la fonction ? C'est ce que tu apelles une variable membre de la classe ?
    As-tu une idée de ce qu'est la portée des variables ?


    La façon dont tu veux les déclarer est interdite.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut
    J'ai fait à un moment un essai en mettant la variable en locale et en essayant de mettre un pointeur sur cette variable et je suis revenu en arrière car tous les résultat donnaient le même diagnostique.
    Il suffisait de mettre les déclaration dans le header avec les objets de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ref class CWManager
    	{
    	public:
    			Word::_Application^                      objApplication;
    			Word::Document^                          objDocument;
    			CWManager::CWManager();
    			CWManager::~CWManager();
    			erc CWManager::StartReader(enDocType DocType, std::wstring wsDocName);

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Bonjour,

    Je te conseil d'aller lire la doc sur les objets que tu essaye d'implémenter.

    De ce que j'ai vu rapidement ce sont des interfaces mais à revoir et dans ce cas tu ne pourra pas les initialiser comme ça (voir interface (virtuel pure)).

    Ensuite application renvoie un objet document^ enfin après j'ai juste rapidement la doc mais je pense que pour le coup msdn est ton ami

    Bonne journée

  9. #9
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut msdn est ma lecture préférée
    et merci pour vos conseil, c'est

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par JeanNoel53 Voir le message
    Il suffisait de mettre les déclaration dans le header avec les objets de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ref class CWManager
    	{
    	public:
    			Word::_Application^                      objApplication;
    			Word::Document^                          objDocument;
    			CWManager::CWManager();
    			CWManager::~CWManager();
    			erc CWManager::StartReader(enDocType DocType, std::wstring wsDocName);
    Citation Envoyé par Bousk Voir le message
    Et à vue de nez, sans jamais avoir fait de managé, la solution est surement très simple et un problème de déclaration. De la classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClassManage
    {
     Word::Document^ m_document;
    };
    Citation Envoyé par Bousk Voir le message
    C'est ce qu'on apelle une variable membre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/09/2011, 16h38
  2. Réponses: 4
    Dernier message: 10/10/2010, 23h06
  3. [VBA] fonction qui reçoit une variable comme arguments
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/07/2007, 11h21
  4. Réponses: 6
    Dernier message: 26/06/2007, 18h36
  5. Fonction qui change une variable
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2006, 12h54

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