Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [c++]SAFEARRAY

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]SAFEARRAY

    Ciao.
    Devo leggere dei SAFEARRAY da un server com.
    prima di leggere i dati devo creare il safearray per la lettura,cosi:

    m_pSAListNamesJoint = SafeArrayCreate(VT_VARIANT, 1, aDim);

    volevo sapere cosa è meglio usare come tipo di elemento del SAFEARRAY sempre VARIANT?
    O i tipi VT_BSTR ecc...?

    Il problema è che ne nelle specifiche ne nella documentazione del server com c'è scritto che tipo usare.
    Da un esempio in vba con i tipi String,Int ecc... usati come array.

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Dipende da cosa devi inserirci dentro!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Devo leggere , il mio problema è che non so che tipo c'è nei safearray che mi arrivano dal com.
    LEggendo il vba usa array di tipi string,int float ecc... ad es string(),int() ecc...

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se quello che viene inserito nel SAFEARRAY non ha un tipo fisso, ti conviene usare il VARIANT (ed eventualmente controllarlo con la classe _variant_t).

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie , un ultima cosa:
    per calcolare il numero di elementi nell array faccio cosi' :
    codice:
    //creo il safearray
    SAFEARRAYBOUND aDim[1];      
    aDim[0].lLbound= 1;     
    aDim[0].cElements= 1;   
      
    SAFEARRAY* pSAOffsetI = SafeArrayCreate(VT_BSTR, 1, aDim);   
               
      .........................CARICO SAFEARRAY...................
      
    //trovo quanti elementi ha:
    long lstart, lend =0;   
    //inizio array elementi e fine array elementi   
    hr = SafeArrayGetLBound( pSAOffsetI , 1, &lstart );   
    hr = SafeArrayGetUBound( pSAOffsetI , 1, &lend );   
      
    //n of elementi   
    lElements =lend-lstart+1;
    il problema è che quando faccio questo ciclo:

    codice:
    for(idx=0; idx < lElements - 1; idx++){
    CString str = m_ComUtils->GetStringValueSA(sa,idx);
    //per semplicità metto gli elementi in un array
    pArray->add(str);
    }

    mi salta un elemento!!

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da giuseppe500
    il problema è che quando faccio questo ciclo:

    codice:
    for(idx=0; idx < lElements - 1; idx++){
    CString str = m_ComUtils->GetStringValueSA(sa,idx);
    //per semplicità metto gli elementi in un array
    pArray->add(str);
    }
    mi salta un elemento!!
    Semmai dovrebbe essere:
    codice:
    for(idx=lstart ; idx < lend + 1; idx++) { // oppure idx <= lend
    CString str = m_ComUtils->GetStringValueSA(sa,idx);
    //per semplicità metto gli elementi in un array
    pArray->add(str);
    }
    Dal momento che non stai usando un array C-like ma uno controllato dalla COM Automation non hai l'obbligo di partire da 0.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    solo che cosi' shodan se ho un array con 0 elementi
    cosi' :
    lstart =1 e lend=1 o
    lstart =0 e lend=0

    idx=0 ; idx < 0 + 1; idx++
    o
    idx=1 ; idx < 1 + 1; idx++

    mi entra nel ciclo e non dovrebbe.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    scusa , ho capito

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.