Visualizzazione dei risultati da 1 a 8 su 8

Discussione: C++ e COM

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    70

    C++ e COM

    Fo il seguente problema: ho fatto un programmino in C+ che contina nel tempo a produrmi una matrice di numeri casuali. Vorrei sparare questi dati in un foglio excel, in modo tale che anche sul foglio excel questi dati continuano ad aggiornarsi alimentati dal programmino in c++. A fare tutto ciò, riesco, utilizzando la COM.
    In particolare utilizzando CoCreateInstance ed Invoke.
    Ma mentre il programma è in funzione, se vado ad intervenire sul foglio di excel per esempio inserendo una somma, il programma si blocca con errore. Che posso fare::: devo per caso utilizzare qualche funzione apposita di COM per sparare i dati in modo asincronico???
    Ditemi voi.
    ciao e Grazie

  2. #2
    Onestamente sono completamente riguardo alle interfacce COM etc..però da quelo che ahai scritto il tuo problema sembrerebbe un problema di mancata sincronizzazione tra processi nell'accesso allo stesso documento quindi potresti provare ad inserire in una sezione critica il codice che accede al documento.Non so prova e fammi sapere.
    Nel caso non lo sapessi una sezione critica è un'area di codice che può essere eseguita da un solo processo per volta.MFC offre la classe CCriticalSection per usarle.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    ...completamente digiuno ....
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    70
    grazzie dell'idea---adesso provo, poi ti so dire, ci metterò un pò perchè è la prima volta che sento parlare delle sezioni critiche per cui devo prima informarmi un pò.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    70
    Sono veramente in panne, non so proprio come gestire una zona critica: vi riespongo il mio problema in modo più dettagliato vediamo se qualcuno sa darmi una soluzione:


    1. Ho sviluppato un programmino in C++ che si compone di una main e 21 functions. Una di queste function richiamata dalla main provvede a prelevare dati da internet e rielaborarli in continuo inserendo i risultati in una matrice C++.
    2. A questo punto il problema è quello di visualizzare il risultato, è ho scelto come interfaccia di visualizzazione excel.
    3. Il programmino C++ preleva i dati da un socket appena si accorge che il socket è pieno, a questo punto rielabora i dati è spara la matrice risultato in un foglio di excel.
    4. Per fare cio sfrutto COM. In sostanza nella Main Utilizzo "CoInitialize" e "CoCreateInstance" , mentre nella function che preleva i dati in continuo e li rielabora (essa è un ciclo continuo "while" che continua sino a che non lo interrompo con ctr C) alla fine del ciclo utilizzo "GetIDsOfNames" ed "Invoke" per richiamare l'oggetto excel e i vari gradi fino al foglio di excel dove poi sparo i dati.
    5. la procedura funziona nel senso che il foglio di excel continua ad aggiornarsi in continuo, ma il PROBLEMONE è che quando intervengo manualmente sul foglio di excel per esempio scrivendo su una cella , il programma si interrompe con errore, in sostanza dice: IDispatch:GetIDsOfNames("&S")Failed w/err 0x00112e7d0.
    Che fare, mi è stato proposto di risolvere il problema con le sezioni critiche, ma non so proprio da dove inizziare.

    HELP HELP HELP HELP

  6. #6
    Puoi provare a postare un pò di codice compilabile.Non ti sto chiedendo di postare l'intero codice del tuo prog(cosa che magari non ti va di fare) ma solo di prendere il tuo prog,sfoltirlo di tutto tranne la parte che fa il salvataggio via COM (magari salvando dati fasulli come una stringa ,che è sempre la stessa, in continuazione) postare un programma minimale che ha lo stesso problema e che anche se non fa nulla di concreto si compila e si esegue correttamente.sarebbe più facile aiutarti o almeno provarci.Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    70
    hai ragione, ma in questi minuti sono riuscito a risolvere il problema. Ho ancora da capire bene le dinamiche del discorso, comunque
    ho fatto come segue:
    ho utilizzato tutti gli script relativi a COM nella main, sino ad arrivare ad ottenere il DISPID del range di celle su cui volevo sparare i dati in real time.
    A questo punto ho inserito tale dispid in una variabile dichiarata a livello HEAD.
    Quindi, nella function che contiene il loop che continua a richiedere i dati dal web e li rielabora, ho inserito solo "invoke", utilizzando come argomento la variabile dispid dichiarata in HEAD....e funziona.
    Riesco interagire nel foglio di excel senza alcun intoppo.

    In sostanza non ho fatto altro che spostare GetIDsOF Names dalla function al main.

    ciao e grazie a tutti

  8. #8
    Ok se hai risolto allora...Ciao ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.