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++Builder Discussion :

Connect qui échoue


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Connect qui échoue
    bonjour

    Je continue mes recherches et j'ai des réponses sur la connexion d'une application a Word et encore des questions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        CoUninitialize();
        m_pWordApplication = new WORDVER::TWordApplication(NULL);
        m_pWordApplication->InitServerData();
        ErrorCode = CoInitialize(NULL);
        if( ErrorCode == INIT_NO_ERROR)
        {
           m_pWordApplication->Connect();
           apPtr = m_pWordApplication->GetDefaultInterface();
    D'abord, le coinitialize est semble t'il important si le status est mauvais rien ne passe derrière: il s'agit d'ouvrir un lien decom entre l'appli appelante et Word
    après le type TWordApplication vise le fichier Word_XP_Srvr.cpp
    Pour que Coinitialize ait un status positif il est souhaitable ( indispensable? en phase debug) de le faire précéder d'un CoUninitialize
    Maintenant, bien que le status du CoInitialize soit bon (= 0) on butte toujours sur le connect ( vu sous debugger, on alloue le lien puis on passe sur le destructeur de classe qui tue le lien)
    Qui aurait déjà eu l'expérience de ce sujet et pourrait m'orienter, ce serait

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Evolution du code qui ne change rien
    Bonjour
    J'ai fait des essais à tout hasard
    le nouveau code est comme suit:
    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
     
      try
      {
        CoUninitialize();
        ErrorCode = CoInitialize(NULL);
        if( ErrorCode == INIT_NO_ERROR)
        {
           m_pGlobalPtr = new TWordGlobal( NULL);
           m_pWordApplication = new WORDVER::TWordApplication(NULL);
           m_pWordApplication->InitServerData();
           if( m_pWordApplication != NULL)
           {
              m_pApplicationPtr = m_pGlobalPtr->GetDefaultInterface();
              m_pWordApplication->ConnectTo( m_pApplicationPtr);
     
              ErrorCode = 0;
              bIsConnected = true;
           }
        }
        else
           bIsConnected = false;
      }
    quand j'arrive a GetDefaultInterface, il ne voit pas de lien ouvert et donc appelle Connect qui se comporte comme précédement décrit. à plus

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Tu travailles avec quel framework ? MFC ? BCB ?

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Framework de référence
    Bonjour

    Je travaille avec bcb et la bibliothèque bcb2kaxserver. J'ai peu de doc sur ces produits et de toute façon, ca bug dans le début de la connection avant même que j'ai pu passer le moindre paramètre
    à+

  5. #5
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Le source ou ca plante
    Bonjour

    A titre de commentaire sur la précédente indication je vous donne une trace de debug du connect.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TWordApplication::Connect()
    {
      if (!m_DefaultIntf) {
        _di_IUnknown punk = GetServer();
        m_DefaultIntf = punk;
        if (ServerData->EventIID != GUID_NULL)
          ConnectEvents(GetDunk());
      }
    }
    il ne trouve pas de m_DefaultIntf(normal, pas encore ouvert) et donc appelle GetServer, qui alloue une interface puis la détruit, et donc punk n'est pas initialisé et l'allocation de m_DefaultInterface à rien échoue.
    l'allocation de l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              T* __fastcall operator->() const
              {
                    return intf;
              }
    on ressort de la fonction qui alloue l'interface avec une valeur valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
              template <class ANOTHERINTF>
              __fastcall DelphiInterface<T>(const DelphiInterface<ANOTHERINTF> &rhs) : intf(0)
              {
                rhs->QueryInterface(__uuidof(T), (LPVOID*)(&intf));
              }
    et au lieu de renvoyer à l'appelant (on est sur le } fermant)
    on rentre dans le destructeur de classe qui détruit l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
              __fastcall ~DelphiInterface<T>()
              {
                    if (intf != 0) 
                    {
                      intf->Release();
                      intf = 0;
                    }
              }

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Le code assembleur
    J'ai fait sous debugger le code géneré pour le retour
    il y a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mov eax, [ebp-0x28]
    mov fs:[0x000000000], eax
    mov esp, ebp
    pop ebp
    ret
    visiblement c'est le pop ebp qui conduit au plantage on décale l'adresse de retour qui va envoyer vers un autre module....

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

Discussions similaires

  1. Le connect qui échoue
    Par JeanNoel53 dans le forum Firebird
    Réponses: 2
    Dernier message: 10/10/2012, 10h40
  2. Connect qui échoue
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 13
    Dernier message: 01/11/2010, 21h25
  3. Connect qui échoue
    Par JeanNoel53 dans le forum Firebird
    Réponses: 17
    Dernier message: 31/10/2010, 17h16
  4. [C#]Authentification qui échoue : a chaque fois "Login inco
    Par The_revival dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/04/2006, 22h36
  5. Réponses: 8
    Dernier message: 07/12/2005, 14h44

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