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 :

Delphi, Excel et OLE automation


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de CoyotteDundee
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut Delphi, Excel et OLE automation
    Bonjour à toutes et tous,

    J'ai une fonction Delphi à laquelle je voudrais accéder depuis Excel.
    Pour ce faire, j'ai créé une petite application qui comprend un objet Automation et une fonction simpliste.
    Je peux, moyennant un petit morceau de code en VBA accéder à la fonction depuis Excel.

    Tout va pour le mieux dans le meilleurs des mondes... sauf que... sauf que...

    Par curiosité, j'ai commandé l'affichage d'une boîte de dialogue lorsque mon programme est lancé et lorsqu'il est terminé.
    Stupeur et tremblements : Ces boîtes apparaissent pour chaque appel de ma fonction depuis ma feuille Excel.

    Ma question : Est-il possible de faire en sorte que mon "application" ne soit chargé qu'une seule fois par Excel.
    la vraie fonction fera appel à une ou plusieurs tables SQLite et je voudrais éviter de créer les connexions et tables pour chaque appel à la fonction.

    Je précise qu'actuellement, l'objet automation est déclaré Single Thread et Single Instance. Peut-être dois-je chercher de ce côté là ? Mais alors quelles parties de mon code doivent être protégées ?
    Si quelqu'une pouvait m'indiquer une piste, voire même pourquoi pas un tutoriel à ce sujet.

    Merci d'avance,

    Coyotte

    ps: Oublié de préciser que je suis en Xe8...

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    En Delphi, pour utiliser un objet existant c'est GetActiveOleObject si cela renvoie nil, on utilise CreateOleObject pour avoir un nouvel objet
    Idem en VBA : GetObjet et CreateObject
    Idem en PHP : com_get_active_object, j'utilisais bien l'instance déjà lancé d'un EXE qui contenait un objet COM

    Après, faudrait savoir si Excel peut conserver un objet COM ouvert tout du long de son éxecution (peut-être une variable globale en VBA, je ne maitrise pas du tout les macros)
    Il est possible qu'a chaque exécution du script VBA, tout le contexte mémoire est alloué au début et libérée à la fin,
    du coup, ton objet a une durée de vie assez courte et il est chargé et déchargé à chaque fois que le script est lancé
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    comme le dis ShaiLeTroll
    il faut faire un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        try
          MonAppli := GetActiveOleObject(MonAppliCLassName);
        except
          try
            MonAppli := CreateOleObject(MonAppliCLassName);
          except
            raise Exception.Create('Impossible de trouver MonAppli. ');
          end;
        end;

  4. #4
    Membre actif Avatar de CoyotteDundee
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut
    Hello Shai et Anapurna,

    Merci pour vos réponses.

    @Anapurna,: Sauf erreur de ma part, ton code est en Delphi... Mon problème se situe plutôt du côte d'Excel.
    @ShaiLeTroll: En effet, je m'oriente vers une variable "globale" mais je dois plancher la question car les premiers tests ne sont pas concluants :-(

    Merci pour votre aide en tous cas.

    Coyotte

Discussions similaires

  1. DELPHI, EXCEL : Erreur OLE avec fonction SOMME.SI
    Par benoît14 dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2013, 12h30
  2. [WD15] Excel graphe Ole automation
    Par GEOFDEN dans le forum WinDev
    Réponses: 3
    Dernier message: 06/11/2010, 07h22
  3. [WD12] copier une feuille excel en ole automation
    Par Ratafia67 dans le forum WinDev
    Réponses: 5
    Dernier message: 16/04/2010, 08h54
  4. [WD12] exécuter une macro excel avec ole automation
    Par Ratafia67 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/04/2010, 07h57
  5. Manipuler Excel via Ole automation
    Par falcon dans le forum Excel
    Réponses: 3
    Dernier message: 02/10/2007, 15h39

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