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 de Threads avec Excel


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par d�faut probl�me de Threads avec Excel
    Bonjour � tous,

    J'ai un petit probl�me avec le pilotage d'Excel via un thread.
    J'utilise en effet un thread que j'appelle pour lancer une feuille excel et r�cuperer des donn�es en temps r�el.
    Le thread est donc sans arret en train de recuperer de la feuille!

    Le probl�me intervient lorsque j'accede � la feuille et que je modifie la valeur d'une cellule. Le thread me renvoie une Ole Exception RPC_E_CALL_REJECTED.

    Apr�s m'�tre renseign�, j'ai essay� de changer l'initialisation du thread en le d�clarant multi thread apartment gr�ce � la ligne:
    ::CoInitializeEx(NULL, COINIT_MULTITHREADED );

    Alors qu'auparavant, j'utilisais ::CoInitialize(NULL). Ca me l�ve toujours une exception mais cette fois ci le message est RPC_E_SERVERCALL_RETRYLATER.

    Donc apparemment le thread aime pas du tout que l'utilisateur touche � son instance d'excel en m�me temps que lui.

    Le probl�me que lorsque j'utilisais exactement le meme programme dans le main thread, et cela marchait sans aucun soucis.
    C'est ce qui me fait croire qu'il existe un moyen d'�viter la lev�e d'exception, mais n'�tant pas un sp�cialiste de MFC et COM, j'avoue je ne sais pas trop comment faire.

    merci de votre aide

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Utilises Excel en "local server" ou en "in-process server" ?
    Dans le premier cas, le type d'apartment du thread utilis� ne devrait pas changer grand-chose...

    Par contre, il ne faut aucun �change de pointeur d'interface "brut" entre tes threads s'ils ne sont pas dans le m�me apartment.


    PS: Apparemment, tu devrais pouvoir catcher l'exception RPC_E_SERVERCALL_RETRYLATER et simplement, comme son nom l'indique, sauter cette it�ration de r�cup�ration (pour "r�essayer plus tard" � la suivante). Je ne pense pas qu'on puisse vraiment �viter qu'elle soit lanc�e lors d'une modification concurrente d'excel...

    Mais peut-�tre peux-tu, au lieu de r�cup�rer les donn�es en permanence, attendre des �v�nements COM en provenance d'Excel?
    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 averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par d�faut
    Je ne sais pas trop ce que cache les notions de local server ou in process serveur mais je dirais in-process server vu qu'excel est lanc� directement dans le thread.

    Je ne passe aucun param�tre � mon thread, j'appelle mon thread avec ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
       HWND hWnd = GetSafeHwnd();
       CWinThread *threadcalc = AfxBeginThread( mcProc, hWnd, THREAD_PRIORITY_NORMAL );
    Puis je lance Excel dans le thread de la mani�re suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    CApplication app;
    if(!app.CreateDispatch((LPCTSTR)L"Excel.Application.12",pe))
    ...

    En ce qui concerne l'exception,c'est surtout que je ne comprends pas pourquoi elle est lev�e dans mon thread fils, mais qu'elle n'est pas lev�e dans mon main thread.

    En effet au d�but je voulais capturer un �v�nement Sheet_Calculate(), comme il est possible de le faire avec en VBA avec la sub Worksheet_Calculate(). Cela aurait �t� beaucoup plus pratique et �l�gant.
    Mais je ne sais pas comment faire pour g�rer les evenements Excel sous MFC.. et je n'ai rien trouv� la dessus.
    Si tu as des infos la dessus je suis preneur

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Apparemment, Excel ne peut pas du tout �tre utilis� en in-process, sont tu dois �tre en serveur local (Le CreateDispatch() lance un nouveau processus Excel.exe que tu dois pouvoir voir dans le gestionnaire de t�ches).

    Malheureusement, je ne sais pas non plus comment utiliser les �v�nements COM avec Office, ni depuis MFC...
    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.

Discussions similaires

  1. Petit probl�me de VB6 avec excel
    Par petit rabot dans le forum VB 6 et ant�rieur
    R�ponses: 10
    Dernier message: 20/11/2010, 11h04
  2. Probl�me de threads avec RCP (SWT inside)
    Par slashmax dans le forum Eclipse Platform
    R�ponses: 1
    Dernier message: 11/07/2008, 15h00
  3. Probl�me SWT & thread avec readLine()
    Par TheFuzion dans le forum G�n�ral Java
    R�ponses: 1
    Dernier message: 06/05/2007, 18h42
  4. Probl�me de d�ploiment avec Excel et Delphi
    Par wbagg2 dans le forum API, COM et SDKs
    R�ponses: 5
    Dernier message: 18/01/2006, 22h59

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