Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Passaggio Array di Stringhe da VB a C

    Salve a tutti,

    Vi sarei davvero grata se poteste aiutarmi a risolvere questo problema.

    Ho scritto una libreria in C che esporta una funzione che richiede come parametro un array di stringhe.

    Da VB dovrei invocare tale funzione. Con l'aiuto di google ho scoperto i SAFEARRAY e so quindi passare i

    parametri ma non so accedere agli stessi. Mi spiego meglio con un esempio brevissiomo.

    Supponiamo che la funzione C sia:

    codice:
    long __declspec (dllexport) __stdcall ProvaArrayString(SAFEARRAY **ppsaMyArray)
    {
    
            ...
    
    	return 0;
    }
    e che da VB abbia qualcosa del genere:

    codice:
    Dim s(4) As String
    s(0) = "Pippo"
    s(1) = "Pluto"
    s(2) = "Paperino"
    s(3) = "Minnie"
    
    Dim tmp As Long
    
    tmp = ProvaArrayString(VarPtrStringArray(s()))
    Cosa devo mettere al posto dei "..." nella funzione ProvaArrayString per visualizzare l'array di stringhe

    contenuto (in qualche modo ma non so come) in ppsaMyArray?

    Grazie in anticipo per il vostro aiuto,

    Cristina

  2. #2

    Moderazione

    Di che versione di VB stiamo parlando? VB6?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

    Re: Moderazione

    Originariamente inviato da MItaly
    Di che versione di VB stiamo parlando? VB6?
    Si esatto, VB6. Scusa, avevo dimenticato di specificare

    Mi sai aiutare?

    Cri

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ti devi registrare ma prova a vedere questo articolo

    Utilizzare codice C con Visual Basic
    http://www.visual-basic.it/Dettaglio...x#.Ufe4P41UGeY
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Per farti capire con un esempio, puoi ordinare quel vettore con

    codice:
    DWORD _stdcall ArrSortVS(SAFEARRAY **psa)
    {
    	LPCSTR HUGEP *pStr;
    	HRESULT hr;
    	LONG e, els;
    
    	if(SafeArrayGetDim(*psa) != 1) return(1);
    
    	hr=SafeArrayAccessData(*psa, (void HUGEP* FAR *)&pStr);
    	if(FAILED(hr)) return(2);
    
    	SafeArrayGetUBound(*psa, 1, &els) ;
    	SafeArrayGetLBound(*psa, 1, &e) ;
    	els-=e-1;
    
    	qsort((void *)pStr, 
    		(size_t)els, 
    		sizeof(BSTR), 
    		(compFn)cmpArrSortVS);
    
    	SafeArrayUnaccessData(*psa);
    
    	return(0);
    }
    
    
    int cmpArrSortVS(BSTR *arg1, BSTR *arg2)
    {
    	return strcmp((LPSTR)*arg1 , (LPSTR)*arg2);
    }
    usando il tuo codice VB6 un po' modificato

    codice:
    Dim s(1 to 4) As String
    s(1) = "Pippo"
    s(2) = "Pluto"
    s(3) = "Paperino"
    s(4) = "Minnie"
    
    Dim tmp As Long
    
    tmp = ArrSortVS(s())
    EDIT: solo adesso ho visto che hai risolto in http://www.vbforums.com/showthread.p...nd-C&p=4471161 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.