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 :

Client COM dans un composant VCL


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut Client COM dans un composant VCL
    Bonjour,

    Sous BCB6, j'ai cr�� un composant qui encapsule un client COM/DCOM.
    Ce composant dispose d'une fen�tre de configuration, qui permet entre autre la connexion � un serveur COM.

    Le composant fonctionne parfaitement si je l'utilise dans un projet.

    Par ailleurs, j'ai ajout� la possibilit� d'appeler la fen�tre de config dans l'IDE. (paquet design uniquement incluant un RegisterComponentEditor sur ma fen�tre de config, d�finie dans le paquet runtime).

    L�, �a se complique!
    Si je double-clique sur le composant, ma fen�tre de config s'ouvre normalement.
    Si je tente la connexion � un serveur COM, j'obtiens alors une erreur :
    (message box "_ASSERTE"):
    "p!=0 @ c:\program files\borland\cbuilder6\include\atl\atlbase.h/509"
    "Press Yes to terminate, no to continue and cancel to debug".
    Ce message est suivi d'un suivant indiquant "External exception 80000003", et enfin un troisi�me indiquant une violation d'acc�s dans mon bpl runtime.

    Que se passe-t-il ?

    Merci d'avance

  2. #2
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    pour moi �a correspond � la ligne :

    _NoAddRefReleaseOnCComPtr<T>* operator->() const
    {
    ATLASSERT(p!=NULL);
    return (_NoAddRefReleaseOnCComPtr<T>*)p;
    }
    je ne connais pas bien l'implementation COM,
    cependant cet assertion a �t� mise pour empecher de faire un Release() ou autre sur un "smart pointer" qui est NULL;
    ce qui semblerait suggerer que,dans ton cas , l'initialisation du pointeur apr�s CoCreate ou QueryInterface ou autre , retourne apr�s un pointeur null en mode propertyeditor .

    peut �tre qu'en contr�lant les initialisations :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    HRESULT hr = .....
    if (! (SUCCEEDED(hr)) )
    {    
      //message d'erreur
    }
    tu pourrais trouver d'ou �a vient...

    par ailleurs tu pourrais peut �tre essayer de reproduire le bug en testant ton composant "en dehors de l'IDE" (contexte de test : composant non install� dans l'IDE /code du composant mis dans un .h et cpp , et une fiche vierge d'une application , ainsi que la fenetre de ton property editor" ...peut �tre en mettant cette fenetre en modal ou autre ...)

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut
    Djob,

    Tout d'abord, merci pour ta r�ponse.

    Malheureusement, avant mon post, j'avais compl�tement test� mon composant, qui fonctionne sans aucun probl�me, que ce soit en le d�posant sur une fiche, ou en d�rivant une instance de la classe par prog.

    Le prob�me vient bien de la cr�ation de l'instance depuis l'IDE par le propertyeditor.
    J'ai m�me essay� de ne pas la cr�er directement depuis le propertyeditor, mais d'ex�cuter depuis ce dernier une m�thode export�e d'une dll charg�e dynamiquement, laquelle cr�e une instance de ma classe. J'obtiens exactement le m�me r�sultat.

    Par ailleurs, je suis certain d'obtenir un pointeur IUnknown correct, car des QueryInterface sur des interfaces particuli�res des serveurs, ainsi que des m�thodes de ces interfaces appel�es durant l'initialisation de ma Form fonctionnent!!! J'obtiens m�me des donn�es coh�rentes du serveur COM. Tout se bloque apr�s le ASSERT.

    Enfin, tous mes HResults sont d�j� trac�s dans un log, o� je ne vois rien de sp�cial.

    J'avoue! je cale...

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut
    Toujours pas de solution ! En revanche si �a peut �tre utile, j'ai localis� l'origine exacte du d�clenchement de l'exception qui se produit lors de la lib�ration de ressources allou�es par le serveur (appels de free() sur le pointeur d'allocation g�n�ral), et donc bien s�r, uniquement en mode design-time.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 26
    Par d�faut
    Pour ceux que �a pourrait interresser (apparament, pas grand monde!!) j'ai fini par trouver.
    En mode design, il faut allouer le pointeur d'allocation COM depuis le paquet de conception.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Chargement de composant COM dans Silverlight
    Par nicosang dans le forum Silverlight
    R�ponses: 1
    Dernier message: 19/03/2008, 17h06
  2. Encapsuler un composant com dans une assembly
    Par Arthis dans le forum ASP.NET
    R�ponses: 1
    Dernier message: 24/05/2007, 09h59
  3. Utilisation de type Manager dans un composant COM
    Par themadmax dans le forum C++/CLI
    R�ponses: 4
    Dernier message: 29/12/2006, 10h02
  4. utilisation du help file dans les composants de la VCL
    Par SOPRA-Eherve dans le forum C++Builder
    R�ponses: 1
    Dernier message: 28/09/2006, 22h47
  5. [D2006] - Utiliser un composant C# dans une appli VCL.NET
    Par RamDevTeam dans le forum Delphi .NET
    R�ponses: 1
    Dernier message: 13/02/2006, 16h07

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