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 :

GetObject et Marshal.GetActiveObject(App);


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut GetObject et Marshal.GetActiveObject(App);
    Bonjour,
    Voila mon problème, j'imagine qu'il est récurent, mais vos suggestions me serraient d'un grand secoure.

    je veux déclarer un objet pointant sur une application déjà ouverte (EXCEL,WORD...); bien sur je devrais gérer les exceptions ce que je ne fais pas dans le code que je vous fournis mais la ne serra pas le problème; hors dans l'exemple que je donne, je me retrouve avec une copie de l'instance et pas l'original avec le contenu de mon fichier ouvert que je ne peux donc pas modifier.

    Merci d'avance pour votre aide.
    Code Formulaire : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void button1_Click(object sender, EventArgs e)
            {
    		    Class1 ex=new Class1();
                dynamic xlApp= (dynamic) ex.GetObject("Excel.Application");
                xlApp.Visible = true;
                xlApp.Workbooks.Add();
                xlApp.Quit();
     
                xlApp = null;
                ex = null;
            }
    Code Class1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public  dynamic GetObject(String App)
            {
                return (dynamic)  Marshal.GetActiveObject(App);
            }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je viens de regarder attentivement la doc de la fonction "Marshal.GetActiveObject" et tu l'as utilisé exactement comme il faut, et normalement oui il va aller chercher l'instance d'Excel déjà ouverte.

    Qu'est-ce qui te fait penser que tu as pris une copie et non pas l'instance? Si tu mets un point d'arrêt à la ligne "xlApp.Visible=true" par exemple, et lorsqu'il est arrêté là si vraiment il a lancé une autre instance, tu le verras dans le gestionnaire des tâches.

    Après, Est-ce que tu n'aurais pas oublié de faire un "Save" avant l'appel à "Quit"?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oui effectivement en pas à pas je voie l'instance 2 ce créer!

    je me suis demandé si ça ne venais pas du fait de passer par une fonction mai je ne voie pas pourquoi ça réagirait de la sorte?

    pour vérifier je referme l’instance et l'excel déjà ouveret devrait ce fermer
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Sur ton "GetObject", essaye de renvoyer un "object" au lieu d'un "dynamic" pour voir si ça fait pareil... et sans le recaster en dynamic.

  5. #5
    Invité
    Invité(e)
    Par défaut
    j'ai fais le test en retournant un objet et en invoquant le méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using BF = System.Reflection.BindingFlags
     
    xlApp.GetType().InvokeMember( "Visible",BF.SetProperty, null, xlApp, new object[1] { true });
    même problème!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Non ce n'était pas ça que je voulais dire.

    C'est ta fonction "GetObjet" où il faut l'écrire ainsi pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public object GetObject(String App)
    {
       return Marshal.GetActiveObject(App);
    }
    et dans ton appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void button1_Click(object sender, EventArgs e)
    {
       Class1 ex=new Class1();
       object xlApp= ex.GetObject("Excel.Application");
       Microsoft.Office.Interop.Excel.Application app = (Microsoft.Office.Interop.Excel.Application)xlApp;
    }
    ...
    et là tu mets un point d'arrêt sur la ligne où j'ai mis "app" juste pour savoir si à cet endroit il y aura une nouvelle instance d'Excel visible dans le gestionnaire des tâches.

    Après, si ça ne fonctionne toujours pas, autre question : y-a-t'il plusieurs version d'Excel installées sur ton poste?

  7. #7
    Invité
    Invité(e)
    Par défaut
    l’idée, est de faire pointé plusieurs instance d'application quelque soit l'application (EXCEL,WORD,AUTOCAD) sur des machines de version disparate. mais surtout une sur un serveur qui autorise l'ouverture de plusieurs documents mais qu'une licence.

    cela me permets de gérer un automate qui exécute plusieurs application identique sous forme de jobs avec une licence unique.

    ces une application que j'ais développé en VB6 (.EXE) et que je migre en c#.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ah d'accord, en fait Excel n'est pas installé sur le poste où tu testes, c'est ça?

    Là, le test devient compliqué...

    Sinon as-tu essayé ce que je t'ai conseillé concernant ton "Marshal.GetActiveObject"?

  9. #9
    Invité
    Invité(e)
    Par défaut
    je suis un gros nul, j'avais implémenté juste avant la routine CreatObject et j'avais 10 sessions Excel masquées, d'ou mon désarrois!

    tu à raison ça marche en l’état c'est moi qui ne suis pas en état

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

Discussions similaires

  1. [Kylix] deployer une app. kylix3... PROBLEME!
    Par le_barbu dans le forum EDI
    Réponses: 2
    Dernier message: 16/12/2003, 20h53
  2. Créer un app Multimedia en reseaux
    Par kaygee dans le forum Développement
    Réponses: 3
    Dernier message: 17/11/2003, 15h47
  3. [Win32]App multithread
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 25/09/2003, 09h57
  4. App Socket Raw avec VC++6
    Par Martin Soucy dans le forum Développement
    Réponses: 3
    Dernier message: 04/12/2002, 05h07
  5. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05

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