Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Puntatore DLL Vb.Net

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54

    Puntatore DLL Vb.Net

    Buongiorno a tutti.

    Ennesimo dubbio amletico :-)

    Ho diversi programmini scritti in vari linguaggi, che richiamano una Dll scritta molto tempo fa da un collega in C++ (credo) e tutto funziona correttamente.
    Nel manuale della DLL, la definizione è la seguente:

    codice:
    short DLL_Read( long Param1, long *Data, short Count, short Param2, short Param3);

    Come potete notare, viene passata una variabile "Data" di tipo puntatore.

    I vari programmini (tra cui uno scritto da me in Vb.Net), richiamano la funzione come descritto di seguito, e, come da copione, mi ritrovo la variabile "Data" riempita correttamente con un array di Integer

    codice:
    Declare Function DLL_Read Lib "libreria.dll" (ByVal Param1 As Integer,  ByRef Data() As Integer, ByVal Count As Short, ByVal DNG_Param2 As  Short, ByVal Param3 As Short) As Short
     
    Public Sub Prova()
        Dim Data(20) As Integer
        RetCode = DLL_Read(5, Data, 316, 1, 1)
    End Sub

    Ora...Avrei la necessità di riscrivere la DLL richiamata dai vari programmi in VB.Net senza modificare i diversi programmi, ma ho qualche problema nel capire come tornare indietro la variabile puntatore.
    Di seguito quello che ho fatto...ma non funziona; quando richiamo la nuova DLL Vb.Net dai programmini, mi vengono generati degli errori di Access Violation. Sapete aiutarmi?

    codice:
    <ExportDllAttribute("DLL_Read", System.Runtime.InteropServices.CallingConvention.Cdecl)> _
    Public  Shared Function DLL_Read(ByRef Param1 As Integer, ByRef Data As IntPtr,  ByRef Count As Short, ByRef Param2 As Short, ByRef Param3 As Short) As  Short
     
    Dim myData() As Integer = {0, 1, 2, 3}
    Dim size As Integer = Marshal.SizeOf(myData(0)) * DataIn.Length
    Data = Marshal.AllocHGlobal(size)
    Marshal.Copy(myData, 0, Data, Data.Length)
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito ... nel codice alla fine la chiamata alla DLL dove sta?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    Il codice alla fine è il codice della nuova DLL che dovrà sostituire la DLL in C++.
    In pratica, io dovrei compilare questo codice e generare una DLL da sostituire all'attuale DLL scitta in C++ per fare le stesse cose (più altre che dovrò aggiungere)

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    In parole povere, quello che voglio fare è creare una DLL Vb.Net che esegua lo stesso codice della DLL C++ e quindi devo essere in grado di definire (in Vb.Net) una funzione equivalente a questa funzione C++
    codice:
    short DLL_Read( long Param1, long *Data, short Count, short Param2, short Param3);
    ...dove il parametro "*Data" in ingresso deve essere valorizzato e ritornato con un array di Integer

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.