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 :

Utilisation simple d'un objet COM


Sujet :

C++

  1. #41
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Ben oui comme je te l'ai dit, dans le grand POST, ça marche nickel, j'arrive a ouvrir un EXTRA avec une instruction a lui de run.
    Puis j'arrive a me connecter, ecrire, lire tout baigne.
    Mais la ou ça merde, c'est quand je veux gerer deux extras.

    J'ouvre le premier, le deuxieme.
    Je classe les handles, sessions, et system dans un tableau de façon a ne pas les melanger, j'arrive bien a faire marcher l'un puis l'autre, ecrire dans un et dans l'autre, lire dans un et dans l'autre simultanement, c'est la jouissance totale, la rondelle d'urine sur le pantalon de bonheur

    Mais la ou ça peche, c'est quand je ferme LM et me deconnecte, tout en laissant les deux EXTRAS ouverts.
    Je relance le meme code, et la il se melange les pingoinces
    Il ecris et lis toujours dans le second.
    J'ai cherché pourquoi et est découvert que le handle de retour etait toujours le meme, la session est differente, le system aussi et dans mon tableau j'ai le meme handle à la ligne 1 et 2, comme si il etait resté quelque chose de mémorisé dans windows.
    Pour que ça remarche, faut que je ferme les deux EXTRAS.
    Et la,......... roule ma poule, c'est reparti comme en 40, ça baigne, rondelle etc ....

    J'ai envoyé un message sur le forum international de LM au createur de la lib LmDispHelper et pas de reponse.
    J'suis tout seul, avec le peu de connaissance que j'ai, personne y veux m'aider, sauf toi
    A croire que je suis le seul au monde a vouloir faire du OLE sans VB

  2. #42
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Bon j'ai essayé de faire un essais, mais ils disent des gros mots

    Oui, parfaitement ils parlent d'inserer dans VC++ avec PRAGMA

    For Visual C++, Borland C++ and LCC-Win32 import libraries are included via pragma directives
    Qui c'est ce PRAGMA la ????

  3. #43
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est un truc non-portable dont tu n'as pas besoin.

    Les "import libraries" (bibliothèques statiques d'importation), ça sert à utiliser des DLL Standard sans se casser le c*l avec les fonctions de chargement comme LoadLibrary(). Pour Visual, il s'agit de fichiers .lib du même nom que la DLL.

    Déjà, est-ce que sous VB, tu arrives à ouvrir deux EXTRA ?
    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.

  4. #44
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Bonne question..... j'ai meme pas essayé
    J'essaye tout de suite, hop hop....

    Tu es une mere pour moi

  5. #45
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    J'ai l'impression que ça fait pareil
    Eh oui, comment faire pour reafilier une session a un objet deja ouvert ???

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu ne peux pas ouvrir deux EXTRA en VB, c'est normal que tu ne puisses pas non plus en C ou en LM: Ce doit être la bibliothèque qui n'autorise pas ça, ou bien tu n'utilises pas la bonne fonction.

    Peux-tu poster le code VB?
    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.

  7. #47
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Je viens de tomber sur un nid de code EXTRA
    Apparement on peux gerer plusieures sessions sans problemes, c'est que je ne sais pas les déclarer.

    Y'a une histoire de System.Session.Item(x), x etant le numero de la session.
    Et si tu veux le nom Session.Item(x).Name.

    J'ai fait quelques essais, je suis arrivé a ce que je voulais et ce bourrin de VB a planté alors que je n'avais pas coché la sauvegarde au lancement depuis que j'ai installé visual studio pour avoir VC++.
    Du coup Pfffuuit en fumée le code

    J'suis dégouté t'entend ça, ça a marché et prrooouuutt

    Et j'ai essayé de le refaire et pas moyen.
    Je vais reprendre ça demain matin, je pense que je devrais y arriver de nouveau, enfin j'espere

    On se retrouve demain et si ça t'interesse je te tiendrais au courant

    Merci beaucoup pour tout, bonne soirée

  8. #48
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Ayaihhh apres un gros dodo, voila l'angoisse qui est de retour

    Je suis arrivé a faire marcher deux sessions en VB, comme il se doit (Enfin j'espere )

    Bon maintenant le probleme, c'est convertir le code en "DispHelper"

    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
    Dim System As Object 
    Dim Sessions As Object 
     
    Set System = CreateObject("Extra.System") 
    Set Sessions = System.Sessions 
     
    For i = 1 To Sessions.Count 
     
     If Not Sessions(i) Is Nothing Then 
     
      MsgBox Sessions(i).Name 
     
     End If 
     
    Next

  9. #49
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça ressemble à un truc du genre (en C, sans le traitement d'erreurs) :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    DISPATCH_OBJ(System);
    DISPATCH_OBJ(Sessions);
    int count;
    int i;
     
    dhCreateObject(L"Extra.System", NULL, &System);
    dhGetValue(L"%o", &Sessions, System, L".Sessions");
    dhGetValue(L"%d", &count, Sessions, L".Count");
    for(i=1 ; i<=count ; i++)
    {
    	DISPATCH_OBJ(sess);
    	/* Note: Le nom n'est peut-être pas "item" */
    	dhGetValue(L"%o", &sess, Sessions, L".Item(%d)", i);
    	if(sess != NULL)
    	{
    		LPWSTR name;
    		dhGetValue(L"%S", &name, sess, L"Name");
    		MessageBoxW(NULL, name, L"Name", MB_OK);
    		dhFreeString(name);
    	}
    	SAFE_RELEASE(sess);
    }
    SAFE_RELEASE(Sessions);
    SAFE_RELEASE(System);
    NOTE: Je n'ai pas essayé de compiler.
    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.

  10. #50
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Merci beaucoup mon bon MEDINOC.

    Tu as gagné le ponpon, tu t'es fait copain avec un boulet

    Je vais essayer et te tiens au courant.
    Mille merci encore

    Je vais l'avoir ce OLE, je vais l'avoir ....

  11. #51
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Tu va rire .....
    En fait, ...........j'suis pas sur que tu va rire

    Tu me fait un super code de la mort, et moi le bouffon de sevice, j'sais meme pas ou faut le mettre

    J'ai fait ça, je suis pas sûr, mais quelque chose me dit que j'ai du encore merder "queque part"

    J'ai 2 erreur :

    Compiling...
    Main.cpp
    c:\dishelperappeldll_c\main.cpp(2) : error C2146: syntax error : missing ';' before identifier 'WinMain'
    c:\dishelperappeldll_c\main.cpp(2) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.

    DisHelperAppelDll_C.exe - 2 error(s), 0 warning(s)
    Fichiers attachés Fichiers attachés

  12. #52
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Eh bien, puisque tu cherches à faire une DLL, tu veux sans doute mettre ce code dans une fonction que la DLL exporte...

    Si tu déclares juste la fonction ainsi:
    EXTERN_C NOMDETADLL_API void __stdcall DisplaySessionNames(void);
    Elle sera exportée sous le nom _DisplaySessionNames@0 (ce qui peut être modifié en ajoutant au projet un fichier .def, et en y écrivant ce qu'il faut pour choisir soi-même le nom exporté de la fonction).

    PS: Je rappelle qu'une DLL ne doit pas avoir de fonction WinMain() : C'est réservé aux applications (.exe). Et encore, seulement celles qui n'ont pas de console, car les applications console ont un simple main() à la place.
    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.

  13. #53
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    PS: Je rappelle qu'une DLL ne doit pas avoir de fonction WinMain() : C'est réservé aux applications (.exe). Et encore, seulement celles qui n'ont pas de console, car les applications console ont un simple main() à la place.
    Bon ça ....comme dirait murielle robin , c'est imprimé
    Une DLL = Pas de winMain
    Un exe win32 = Au moins une fonction WinMain
    Un exe console = Au moins une fonction Main (Comme pour le vieux C)

    T'as déjà pas perdu ton temps, j'ai compris ça

    Citation Envoyé par Médinoc Voir le message
    Eh bien, puisque tu cherches à faire une DLL, tu veux sans doute mettre ce code dans une fonction que la DLL exporte...
    Je crois pas que ce que c'est que je voulais faire

    Moi, bettement, je croyais creer une DLL avec le premier projet contenant les fichiers .h et .c de DispHelper (DispHelperDll_C.zip)

    Et apres creer un autre projet qui appelle ces fonctions contenues dans la DLL.(DisHelperAppelDll_C.zip)
    Car je croyais qu'une fois la DLL créée, je n'avais qu'a mettre ton code dans un exe, qui allait appeller la DLL avec les fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dhCreateObject(L"Extra.System", NULL, &System);
    dhGetValue(L"%o", &Sessions, System, L".Sessions");
    dhGetValue(L"%d", &count, Sessions, L".Count");
    Ce que je peux etre naif des fois

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/04/2009, 17h56
  2. Utilisation des objets COM
    Par jdelges dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 26/01/2007, 23h52
  3. Peut on utiliser un objet com avec eclipse
    Par MoiAussi dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/09/2006, 15h47
  4. [COM] Comment utiliser l'objet COM ?
    Par splinternabs dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 14/04/2006, 11h58
  5. [COM] Utilisation d'un objet COM
    Par Sophy75 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/04/2006, 18h43

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