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

API, COM et SDKs Delphi Discussion :

retrouver le PID d'un objet OLE


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut retrouver le PID d'un objet OLE
    bonjour a tous,
    j'ai du code qui cree un objet OLE excel, puis s'amuse a remplir des cases et enfin ferme le fichier et libere l'objet.
    Mais de temps en temps, le remplissge plante et ca declenche une exception, le soft sort de la methode et j'ai 2 soucis :

    le premier le process Excel.exe est toujours existant (et verouille le fichier qui est ouvert)
    l'objet existe toujours.


    pour l'objet, je pense finir par trouve la solution en utilisant une variable globale pour pouvoir le desallouer.

    Par contre comment trouver le Process Id du excel créé par mon OLE ?

    Merci.

    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    msexcel := createoleobject('Excel.Application');
    msexcel.Visible := false;
    fichier := msexcel.workbooks;
    feuille := classeur.worksheets['Fiche à imprimer'];
    ...
    feuille.range[xml.Root.ReadWidestring('armure','')].value := s;
    ...
    msexcel.Calculation := xlCalculationAutomatic;
    msexcel.CalculateBeforeSave := True;
    classeur.save;
    msexcel.quit;
    msexcel := unassigned;
    Le probleme se produit si ca genere une exception entre les "..." (je sais ca devrait pas générer d'exception, mais comme j'ai plus de 1000 lignes de feuille.range... j'ai pas trop envie de rajouter 5000 lignes de code...


    Merci.

  2. #2
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut
    Je viens en fait de trouver un truc "AINEAURME" ! c'est tellement simple que ca en est émouvant :
    c'est cette page :
    http://dotnet.developpez.com/faq/cpp...DotNETOffice10

    Ca consiste a cumuler les PID des process excel avant et apres la creation de l'objet OLE, et par difference on obtient le PID de celui qu'on vient de créer.

    Bon suffit de remplacer winword par excel et de faire ca en delphi plutot qu'en C, mais je crois que tout le monde a compris.

  3. #3
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Pour l'objet, il vaut mieux utiliser un try finally.
    Cela devrait aussi résoudre le problème du processus.

  4. #4
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut
    Ben le probleme c'est que quand le soft plante dans l'appel d'un evenement, l'execution de l'evenement est stoppe, mais le programme continue sa route (j'ai active l'option "ne pas interrompre sur une exception") du coup je ne sais pas quand ca a plante. En plus comme mon objet est local il n'est plus visible en dehors de l'evenement. C'est pour ca que je vais tenter de le mettre en global come ca je pourrai le liberer.

    Merci.

  5. #5
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Il y a quelque chose que je dois rater (Je ne suis pas habitué d'OLE).

    Ce code suivant ne convient pas (je l'ai testé avec elphi 7 et Offixe XP)?
    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
     
    msexcel := createoleobject('Excel.Application');
    try
      msexcel.Visible := false;
      fichier := msexcel.workbooks;
      feuille := classeur.worksheets['Fiche à imprimer'];
      ...
      feuille.range[xml.Root.ReadWidestring('armure','')].value := s;
      ...
      msexcel.Calculation := xlCalculationAutomatic;
      msexcel.CalculateBeforeSave := True;
      classeur.save;
    finally
      msexcel.quit;
      msexcel := unassigned;
    end;

  6. #6
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut
    Je dois avouer que j'avais meme pas teste
    Faudra que je fasse le test.
    Par contre petite question :

    peut on imbriquer des bloc Try Finaly ?

  7. #7
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Oui sans problème.

Discussions similaires

  1. [Sources]Récupérer le chemin d'un objet OLE
    Par Mr.Gus dans le forum Contribuez
    Réponses: 9
    Dernier message: 12/05/2005, 10h11
  2. Manipulation d'un Objet OLE Excel ?
    Par NiKro75 dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/07/2004, 17h43
  3. [VB6] Modification objet OLE dans Word sous VB
    Par zworg dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/02/2004, 08h20
  4. [CR 8.5] Objet ole lié (BMP) ne se remet pas à jour .
    Par rodrigue50 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 12/02/2004, 10h43
  5. [VB6][DoVerb]Lancer automatiquement un objet OLE
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/11/2002, 13h29

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