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

    Passare matrice da VB6 a dll in VC++

    Salve amici,
    in un programma in VB6 vorrei passare una matrice alla funzione di una dll realizzata in VC++.
    Ho provato a passare la matrice per riferimento come normalmente si fa per i semplici array monodimensionali: il compilatore VC non mi segnala alcun errore ma non appena il programma VB tenta di eseguire le linee di codice della funzione della DLL che utilizzano la matrice (come una semplice stampa su file dei valori contenuti nella matrice) l'esecuzione va in crash.
    Nelle linee di codice che seguono vi riporto, a titolo di esempio, le dichiarazioni della funzione in VB:
    codice:
    Declare Function MainFun Lib "MyDll.dll" (m_intArray As Long, m_intMatx As long) As Long
    Stato = MainFun(intArray(0), intMatrx(0,0))
    e la corrispondente in VC++:
    codice:
    int MainFun(int *m_intArray, int **m_intMatx)
    Per il vettore intArray tutto fila liscio. I problemi si verificano quando tento di utilizzare la matrice.
    Dove sbaglio?
    Grazie per ogni suggerimento.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Tu puoi modificare il sorgente C della DLL ?

    Puoi leggere l'articolo

    http://www.visual-basic.it/articoli/agVB_VC.htm

    a partire da

    Il passaggio di array
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie oregon per la tua risposta.
    La DLL in VC l'ho realizzata io. Ho realizzato altre DLL perfettamente funzionanti ma che gestiscono soltanto array ad 1 dimensione. Il problema mi sta sorgendo adesso che vorrei far gestire alla dll una matrice inizializzata in VB.
    Ho letto l'articolo che mi hai suggerito e pare che una "probabile" soluzione possa essere quella di utilizzare opportumente i SAFEARRAY. Purtroppo, però, non sono riuscito a trovare a riguardo una documentazione completa con qualche esempio specifico sulla gestione di array bidimensionali.
    Ho trovato questo thread: http://www.cqf.info/forum/viewtopic....=asc&start=15.
    In esso si mette in evidenza che in VB gli array sono allocati in memoria per colonna mentre in C per riga. Ho seguito il metodo che viene suggerito ma anche a me, come nell'ultimo post di quella discussione, viene fuori un vettore che non riproduce esattamente la matrice originaria.
    A questo punto penso di gettare la spugna ed utilizzare, al posto della matrice, una vettore di strutture contenenti ciascuna un array. Che ne pensi?
    Bye!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dico che non hai letto bene l'articolo che ti ho proposto ...

    Dato che puoi modificare la DLL e il codice VB, perche' non segui quello che c'e' scritto lì?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Opss... allora studio e ti faccio sapere.
    Grazie ancora.
    Ciao!

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.