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

MFC Discussion :

Problème librairie TLB (visual Basic -> visual c++(6))


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut Problème librairie TLB (visual Basic -> visual c++(6))
    J'utilise une bibliotèque qui permet d'envoyer des commande dans un autre programme.
    Avec Visual Basic j'ai pas de problème quand j'ajoute la library TLB (dans références).
    Je cherche à faire la même chose mais en C++ mais je n'y arrive pas: pas de problème de compilation mais un jolie plantage de l'exécutable créé.


    voici le code source en Visual basic (marche):

    ---code en Visual Basic (qui marche):---
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim GraphicsBuilder As IGraphicsBuilder
        Set GraphicsBuilder = New GraphicsBuilder.GraphicsBuilder
        With GraphicsBuilder
        .Visible = True
        .PageNew "include", "standard", "normal", 0, True, True
    End With
    ---------------------------------------------

    ---code en Visual C++ (qui NE marche PAS):---
    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
    17
    18
    19
    20
     
          #include <stdio.h>
          #import "C:\Program Files\Citect\CitectSCADA\Bin\CTDRAW32.TLB"
     
          int test(void)
          {
             GraphicsBuilder::IGraphicsBuilder *aaa;
             aaa = NULL;
    aaa->put_Visible(true);                                            //Cette ligne fait planter
    aaa->PageNew("include", "standard", "normal",0,1,1);       //Cette ligne fait planter
     
          return 0;
          }
     
          int main(void)
          {
             printf("Ca va Marcher\n on y croit...\n");
             test();
             return 0;
          }
    ------------------------------------------------------------

    pour l'histoire de '1' au lieu de 'true', c'est la commende qui est un peu différente en c++ sinon ça compile bien malgré le plantage. J'ai essayer en retirant la première ou la seconde et l'inverse , ça marche pas
    Merci d'avance


  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu essayes de te servir de aaa, alors qu'il est nul. Il faut bien sur l'initialiser quelque part

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut
    Merci pour ta réponse,
    C'est exact, je suis d'accord que l'erreur vient de la... je rame à réapprendre l'utilisation des classes.
    J'ai modifer la ligne:
    "aaa = NULL; "
    par:
    "aaa = new GraphicsBuilder::IGraphicsBuilder;"

    et là festivale de Warning + 2 erreurs:
    1ère:

    "IGraphicsBuilder' : cannot instantiate abstract class due to following members:
    c:\program files\microsoft visual studio\myprojects\xml2ct\debug\ctdraw32.tlh(40) : see declaration of 'IGraphicsBuilder'"

    et la seconde:
    "error C2259: 'IGraphicsBuilder' : cannot instantiate abstract class due to following members:
    c:\program files\microsoft visual studio\myprojects\xml2ct\debug\ctdraw32.tlh(40) : see declaration of 'IGraphicsBuilder'"

    sachant qu'il me montre dans le fichier IGraphicsBuilder ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct __declspec(uuid("a51ae4ee-3e34-4878-9090-560cbeef7ff4"))
    IGraphicsBuilder : IDispatch
    {
        //
        // Property data
        //
    ...
    }
    ça marche pas j'arrive pas à initialiser l'instance!

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Si c'est un objet com, il faut utiliser CoInitialize et tout le toutim ... avec une recherche avancée sur le forum, tu devrais trouver ce qu'il te faut

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut
    heu.. je crain que ce soit un objet "com"... je nage ... ça à l'aire bcp plus simple en Visual Basic..
    on dirai kya que des tutos dur sur le sujet...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 112
    Par défaut
    bon j'ai continué à chercher, et j'ai entré ce programme:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <stdio.h>
    #include <windows.h>
    #include <comdef.h>
     
    #import "C:\Program Files\Citect\CitectSCADA\Bin\CTDRAW32.TLB"
    const IID IID_IRadio = {0x33A55B2B,0x55FC,0x4632,{0xBC,0xF0,0x4D,0xE3,0xC5,0x1F,0xD0,0x48}};
    const CLSID CLSID_Radio = {0x33A55B2B,0x55FC,0x4632,{0xBC,0xF0,0x4D,0xE3,0xC5,0x1F,0xD0,0x48}};
    int good(void)
    {
    	HRESULT hr;
    	GraphicsBuilder::IGraphicsBuilder* pRadio;
    //	IRadio* pRadio;
    //_bstr_t strStation("TEST");
     
    	hr = CoCreateInstance(CLSID_Radio,		// CLSID du composant
    			NULL,							// --> Sert pour l'aggrégation !
    			CLSCTX_ALL,						// indique quoi rechercher (dll, exe, distant)
    			IID_IRadio,						// interface
    			(void**)&pRadio);				// objet retourné
     
    	if (FAILED(hr)) return -1;
     
    	// Utilisation du composant ...
     
    	pRadio->put_Visible(true);
    	pRadio->PageNew("include", "standard", "normal",0,1,1);
     
    	CoUninitialize();
    	return 0;
    }
     
    int main(void)
    {
     
    	printf("Ca va Marcher\n on y croit...\n");
    	printf("\nresultat: %i\n",good());
    	return 0;
     
    }
    évidement j'obtient comme résultat "-1"... bref je pense que ça vient des deux constantes du début, je suis pas sur de savoir les trouver correctement, j'utilise "OLE/COM object viewer" et je tombe sur un code du genre {33A55B2B-55FC-4632-BCF0-4DE3C51FD048} et ensuite j'adapte en mettant des "{}" et des"," . Comment on fait pour être sûr que c'est le bon? que c'est comme ça que l'on doit faire?
    merci d'avance

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/08/2009, 11h47
  2. visual basic ou visual basic express
    Par s4mk1ng dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 04/07/2008, 08h15
  3. visual basic ou visual basic office
    Par hono dans le forum Microsoft Office
    Réponses: 11
    Dernier message: 27/02/2008, 15h00
  4. [noob]Visual C++ et Visual Basic
    Par sterepathie dans le forum MFC
    Réponses: 7
    Dernier message: 26/01/2006, 15h03

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