Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Problemi col passaggio di vettori unidimensionali da Dll in Basic a Dll in C

    Salve, ho da modificare un progetto in VB6.0 e VC++6.0 nel quale una funzione in una DLL in Basic chiama una funzione in una DLL in C.

    Il passaggio dei parametri per le singole variabili (int, float, double) va bene, mentre nel passaggio di array unidimensionali ho grossi problemi. I valori che ottengo nella parte della DLL in C sono completamente errati.

    Ho letto in rete la documentazione presente per le modalità di passaggio di un array unidimensionale tra Basic e C e non credo di commettere errori al riguardo.

    Qualcuno può postarmi del codice testato su come passare un vettore unidimensionale tra DLL scritte Basic-C


    Grazie per tutte le info che riuscirete a fornirmi.



  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quale documentazione hai letto ?


    Vedi se questo

    http://www.visual-basic.it/Dettaglio...x#.UkFdWMZkDmc

    (richiede un login)

    ti può essere utile


    Perché non provi a postare il codice usato che non va ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Nella parte DLL BASIC:


    Private Declare Sub ProgVC Lib "Lib_C.dll" (ByRef X1 As Double, ByVal Lim1 As Integer)


    Lim1 = UBound(X1#) + 1
    Call ProgVC (X1#(0), Lim1)



    Nella parte DLL C:

    .h
    void __stdcall ProgVC (double *x1);


    .cpp
    void __stdcall ProgVC (double *x1)
    {
    .............
    .............
    }


    Ovviamente nel progetto della DLL in C ho definito il file *.def.
    Come dicevo nella parte C esaminando l'array ottengo valori errati.
    Qui per semplificare ho riportato solo la parte dell'array. Le variabili scalari della routine vengono passate correttamente.




  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa, ma nel Basic hai due parametri e nel C ne hai uno. Da una parte tratti dei double e dall'altra degli integer ... per forza che non va.

    Dammi qualche indicazione maggiore e ti fornisco qualche suggerimento più preciso.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Magari fosse quello il problema.

    Nel passaggio di un vettore monodimensionale da Basic a C occorre passare il puntatore al primo elemento e la dimensione del vettore. Questo è normale.

    Non ti sei mai trovato in una situazione analoga? Uso di 2 linguaggi di programmazione che comunicano tra loro?



  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì, parecchie volte ... e ti ho anche consigliato di leggere un articolo che ti mostra come fare con esempi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel passaggio di un vettore monodimensionale da Basic a C occorre passare il puntatore al primo elemento e la dimensione del vettore. Questo è normale.
    No... non è così ...

    Me ne sono occupato parecchie volte ... e ti ho anche consigliato di leggere un articolo che ti mostra come fare con esempi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel tuo caso, il programma VB6 ad esempio sarà

    codice:
    Private Declare Sub ProgVC Lib "TuaLib.dll" (ByRef X1 As Double, ByVal Lim1 As Long)
                                     
    Private Sub Form_Click()
        Dim arr(100) As Double
        
        arr(0) = 110
        arr(1) = 220
        
        Call ProgVC(arr(0), 100)
        
        Print arr(0)
        Print arr(1)
    End Sub
    e quello della DLL

    codice:
    void __stdcall ProgVC (double *x1, int lun)
    {
    	double temp;
    
    	temp=x1[1];
    	x1[1]=x1[0];
    	x1[0]=temp;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Uhm, se i miei ricordi di VB6 non mi tradiscono, il secondo parametro nella declare dovrebbe essere di tipo Long.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì, corretto.
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.