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 :

Se passer de l'unité OleAuto


Sujet :

API, COM et SDKs Delphi

  1. #1
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut Se passer de l'unité OleAuto
    Bonjour,

    On m'a confié la charge de lister tous les avertissements de nos produits et de faire une documentation sur la manière de les éradiquer.

    Cependant, je bloque sur l'unité OleAuto.
    J'ai lu dans pas mal de forums qu'il fallait remplacer cette unité par les unités ComObj et ActiveX mais ça ne m'avance pas beaucoup car maintenant je n'ai plus de référence à TAutoClassInfo et j'avoue ne pas très bien connaitre le mécanisme OLE

    Comment puis-je remplacer ce code ?
    Code Delphi : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    uses
      OleAuto;
     
    type
     
    TOleXXX = class(TAutoObject)
      automated
        function DoSomething : variant;
        function DeSomethingElse: variant;
      end;
     
    procedure RegisterXXX;
     
    implementation
     
    procedure RegisterXXX;
    const
      AutoClassInfo: TAutoClassInfo = (
        AutoClass: TOleXXX ;
        ProgID: 'MyProgram.ProgId';
        ClassID: '{252E1A31-EBAE-4A58-9050-3486DC0A1755}';
        Description: 'Une description';
        Instancing: acMultiInstance);
    begin
      Automation.RegisterClass(AutoClassInfo);
    end;
     
    function TOleXXX.DoSomething : variant;
    begin
      ...
    end;
     
    function TOleXXX.DoSomethingElse : variant;
    begin
      ...
    end;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    tu peux tout simplement utiliser RegSvr32 pour enregistrer tes DLL
    Ce code est inutile si ta TLB est correctement renseignée

    D'ailleurs, j'ai une vague documentation de TAutoClassInfo dans mon XE2 mais même pas le code source de OleAuto mais juste la DCU !
    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 popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    En fait, je n'ai pas de DLL. Ce code est dans une application Delphi Win32 que l'on nommera "MyProgram" pour l'exemple.

    Lorsque, dans une application "OtherProgram", je fait appel à CreateOleObject('MyProgram.ProgId'), cela utilise l'application "MyProgram".

    Mon but est de faire la même chose (donc sans DLL) en utilisant des unités qui ne sont pas notées DEPRECATED.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    L'enregistrement du serveur COM se fait simplement en appelant à l'installation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonProgram.exe -regserver
    A noter : avec -regserver, l'application s'enregistre mais quitte immédiatement.
    -unregserver à la désinstallation.

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    En fait (j'aurais dû le préciser) "MyProgram" est une application complète et le but de ces lignes de codes était d'ouvrir une toute petite partie du fonctionnel à une application externe.

    J'ai ce genre de code à trois endroit dans "MyProgram" avec bien entendu trois ProfId différent et trois classId différente

    Le -regserver ne va-t-il pas considerer que tout "MyProgram" est ouvert à l'application externe ?

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    -regserver ne fait qu'enregistrer les objet COM présent dans ton EXE qui ont été déclaré correctement dans la TLB
    C'est pareil que pour une DLL
    un DLL c'est du COM In Process
    un EXE c'est du COM Out-Process
    un EXE c'est la possibilité de faire du DCOM

    il te faudrait lire la documentation à ce sujet : Recensement d'un objet COM et Utilisation de l'expert Objet COM

    Citation Envoyé par popo Voir le message
    Le -regserver ne va-t-il pas considerer que tout "MyProgram" est ouvert à l'application externe ?
    L'interopérabilité entre les processus n'est pas aussi facile !
    Qu'est que tout "MyProgram" ?
    il faut lui décrire ce qu'il contient, sous Windows, c'est le COM et son format IDL
    le IDL est le précurseur du MIDL du .NET (Microsoft Interface Definition Language)

    En Borland, le BPL permet aussi cela pour partager des sources Delphi\C++Builder par d'autres modules Delphi\C++Builder
    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

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Finalement, il a été décidé de réecrire tout ce fonctionnel en C# et d'en faire des DLL.

    Merci de vous être penché sur mon problème

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/07/2008, 19h26
  2. Réponses: 3
    Dernier message: 29/02/2008, 12h41
  3. Réponses: 1
    Dernier message: 23/05/2006, 14h36
  4. Réponses: 1
    Dernier message: 23/09/2005, 18h30
  5. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05

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