Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Variant to string Miniprog3

Risolto!
Vai alla soluzione

Salve a tutti,

Sto utilizzando CVI per interfacciarmi con MiniProg3 della Cypress.

Per visualizzare i dispositivi collegati utilizzo la funzione PSoC_IPSoCProgrammerCOM_ObjectGetPorts che mi restituisce un variant contenente il/i nome dispositivo/i.

DA questo devo estrarre il nome del dispositivo ma non riesco a farlo.

Con la funzione CA_VariantGet1DArraySize mi restituisce correttamente il numero dei dispositivi, e la funzione CA_VariantGetType mi restituisce 4211.

Le funzioni PSoc funzionano correttamente perche in debug se cerco nella memoria sono presenti i noni dei dispositivi.

Grazie per la collaborazione.

 

0 Kudos
Messaggio 1 di 6
5.598Visualizzazioni

Ciao,

il tipo dati 4211 significa un array di stringhe (CAVT_ARRAY | CAVT_CSTRING) che corrisponde a quello che ti aspetti.

Per leggerlo devi passare il variant a un safeArray dal quale estrarre le stringhe; puoi prendere spunto dall'esempio excel2000dem nella cartella activex\excel della cartella esempi.

 

In passato ho verificato che le funzioni di trattamento array 1D non funzionano: ho dovuto usare le funzioni per array 2D con una dimensione pari a 1 (vale a dire una matrice con una sola colonna); non so se la cosa sia stata corretta, ma se usando le funzioni 1D non riesci a ottenere i dati corretti prova con le 2D.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Messaggio 2 di 6
5.585Visualizzazioni

Grazie per la risposta.

Sono 2 giorni che provo ed ho un pò di confusione.

Ho il mio VARIANT Ports.

 

//Con questo ho il mio safeArray:

LPSAFEARRAY safe;

CA_VariantGetSafeArray (&Ports, CAVT_BSTR, &safe);

 

A questo punto utilizzo:

CA_SafeArrayTo2DArray()

CA_SafeArrayTo2DArrayEx()

CA_SafeArrayTo2DArrayBuf()

CA_SafeArrayTo2DArrayBufEx()

 

Provate tutte ma non riesco ad estrarre nulla.

Di seguito un esempio in C_Sharp compreso nella documentazione.

 

static private int OpenPort()
{
int hr;
//Open Port - get last (connected) port in the ports list
object portArray;
hr = pp.GetPorts(out portArray, out m_sLastError);
if (!SUCCEEDED(hr)) return hr;
string[] ports = portArray as string[];
if (ports.Length <= 0)
{
m_sLastError = "Connect any Programmer to PC";
return -1;
}
bool bFound = true;
string portName = "";
for (int i = 0; i < ports.Length; i++) {
if (ports[i].StartsWith("MiniProg3")) {
portName = ports[i];
bFound = true;
break;
}
}
if (!bFound) {
m_sLastError = "Connect any MiniProg3 device to PC";
return -1;
}

 

Se puoi cortesemente dirmi dove sbaglio.

Grazie ancora per l'aiuto.

 

 

 

0 Kudos
Messaggio 3 di 6
5.581Visualizzazioni
Soluzione
Accettato da autore argomento Luca1975

Ciao, scusa ma ieri sono stato un po' incasinato.

Ti allego un piccolo esempio in cui leggo un po' di righe da una listbox, le salvo in un variant e le rileggo dal variant in un array di stringhe che poi passo ad un'altra listbox. Vedi se ci capisci qualcosa; il trucco è stato usare CA_VariantGet1DArrayBuf per memorizzare in un buffer allocato dalla funzione.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Messaggio 4 di 6
5.531Visualizzazioni

Perfetto funziona correttamente !!!!

Grazie mille per l'aiuto

0 Kudos
Messaggio 5 di 6
5.529Visualizzazioni

Non c'è problema: se posso lo faccio volentieri Smiley Felice



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Messaggio 6 di 6
5.524Visualizzazioni