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

Windows Discussion :

Programmation OLE sur Dev C++


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut Programmation OLE sur Dev C++
    Bonjour à tous,
    Je souhaite coder un script de pilotage d'objet OLE (ou COM ? je n'ai pas cerné la différence) en C.
    J'utilise DEV-C++ et j'ai beau essayer tout ce que je veux, pas moyen de créer une connexion avec l'appli a piloter.

    J'ai déjà codé ce script en VBA pour lire les données dans une feuille excel et la connexion à l'appli se faisait en une seule ligne :

    Set LoxAd = CreateObject("LoxanePro.lxwOLEAddress")

    Ensuite j'utilise les méthodes de l'objet mais ça je pense que ça ne pose aucun problème à partir du moment ou l'objet est créé. j'ai également essayé en C++ mais sans succès. Quelqu'un pourrait m'éclairer ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Qu'arrives-tu à faire pour l'instant ?

    En C et en C++, on réfère à l'objet par son CLSID. Normalement, si tu ne l'as pas, tu devrais pouvoir l'obtenir avec la fonction CLSIDFromString() ou CLSIDFromProgID().

    Ensuite, tu pourras passer ce CLSID et l'IID de l'interface voulue à la fonction CoCreateInstance(), pour obtenir une interface du bon type vers l'objet OLE. Reste à espérer que l'interface que tu veux est déclarée dans un header, car je ne crois pas que MinGW accepte les Type Libraries...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    Euh et bien, je n'arrive pas du tout a faire ça.
    j'ai tenté le CLSID puis cocreateinstance mais sans succès. Il doit de toute façon me manquer le header.

    Pourrais tu m'expliquer plus en détail ce que je dois faire ?

    J'ai déjà fait ça :

    HRESULT r1;
    r1 = CoInitialize(NULL);
    CLSID * clsid;
    r1 = CLSIDFromProgID((L"LOXANEPro.Document"),clsid);
    IUnknown pwayProUnknown;
    r1 = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, clsid,(void**) pwayProUnknown );


    Mais il me manque la suite et de manière je comprends pas la moitié.
    CLSID, ça j'ai compris, la récupération du clsid je comprends sauf le L"LoxanePro.Document". Qu'est ce qu'est le L ?
    Et après c'est la semoule complet

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1. L signifie "une chaîne de WCHAR", c'est tout.
    2. Ton pointeur n'est pas initialisé, là... Tu devrais plutôt déclarer directement un CLSID et passer son adresse à la fonction...
    3. Pour IUnknown, c'est le contraire: pwayProUnknown doit être un pointeur.
    4. Et on doit passer son adresse.

    PS: Tu es en C ou en C++, là ? C'est important pour CoCreateInstance(), car en C, il faut explicitement donner l'adresse d'un CLSID.


    Bref, plutôt un truc de ce genre (en C) :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    HRESULT r1;
    r1 = CoInitialize(NULL);
    CLSID clsid;
    r1 = CLSIDFromProgID(L"LOXANEPro.Document", &clsid);
    IUnknown *pwayProUnknown = NULL;
    r1 = CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER, clsid,(void**) &pwayProUnknown );
    if(SUCCEEDED(r1))
    {
       /* jouer un peu avec l'objet */
       /* ... */
     
       /* Et à la fin, on release. */
       pwayProUnknown->lpVtbl->Release(pwayProUnknown);
       pwayProUnknown = NULL;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    D'accord
    Je code en C.
    Par contre, le 4eme paramètre de CoCreateInstance n'a pas le bon type. En mettant &clsid, ça passe. C'est bon ?

    Autrement, je travaille sur quel objet ? pwayProUnknown pour mes méthodes OLE ?
    Tu m'as parlé d'un header, est il obligatoire car en VBA je ne faisais appel à aucune librairie.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oups, je n'avais pas vu ce paramètre.
    Il n'est pas bon. Ici, il faut passer IID_IUnknown ou son adresse.

    Mais on ne peut rien faire avec une simple IUnknown, il faut une interface qui donne les fonctions dont tu as besoin. Je connais mal VB, mais il y a sûrement un type d'interface qui est utilisé, non?


    Pour le header, il en faut forcément un pour MinGW car les Type Libraries ne sont pas supportées, et il est probable que VB soit directement aller en chercher une si elle est indiquée dans la base de registre.
    Reste à savoir si l'interface dont tu as besoin est une interface fournie par Windows (auquel cas elle devrait être définie dans un header Windows, mais pas forcément ceux de MinGW puisque j'ai vu qu'ils définissaient moins d'interfaces que les headers de Visual) ou si c'est une interface spécifique à l'objet, auquel cas il te faudra un header spécifique.

    Il me semble qu'il existe un moyen de générer un header à partir d'une Type Library, mais il me semble que dans tous les cas il faut avoir Visual pour cela... :-(
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 27/10/2006, 13h08
  2. Programme fonctionnant sur Eclipse mais pas avec le jar?
    Par kirik dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/02/2004, 13h43
  3. Réponses: 11
    Dernier message: 17/03/2003, 10h56
  4. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36

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