Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di maz85
    Registrato dal
    Mar 2003
    Messaggi
    75

    [VB.NET] Sostituzione VarPtr e ottenimento puntatore

    Ragazzi devo usare questa API in VB.net poichè sto trasportando il progetto dal VB6

    codice:
    Private Declare Function waveInGetDevCaps Lib "winmm" Alias "waveInGetDevCapsA" (ByVal uDeviceID As Long, ByVal WaveInCapsPointer As Long, ByVal WaveInCapsStructSize As Long) As Long
    nel codice esiste la struttura:
    codice:
        Private Structure WaveInCaps
            Public ManufacturerID As Integer      
            Public ProductID As Integer       
            Public DriverVersion As Long
            Public ProductName() As Byte
            Public Formats As Long
            Public Channels As Integer
            Public Reserved As Integer
        End Structure
    nel codice usavo VarPtr per ottenere il puntatore di "caps" (struttura sopra):

    codice:
    waveInGetDevCaps(1, VarPtr(caps), Len(caps))

    Ora su VB.net come posso ottenere l'indirizzo della variabile?
    Ho provato con GCHandle sostituendo la vecchia varptr:
    codice:
        Public Shared Function VarPtr(ByVal o As Object) As Long
            Dim gh As GCHandle = GCHandle.Alloc(o, GCHandleType.Pinned)
            Dim gh2 As Long = gh.AddrOfPinnedObject.ToInt32
            gh.Free()
            Return gh2
        End Function
    e durante l'esecuzione alla riga:

    codice:
    Dim gh As GCHandle = GCHandle.Alloc(o, GCHandleType.Pinned)
    ottengo
    "L'oggetto contiene dati non copiabili o non primitivi."


    Non so come risolvere...

  2. #2

  3. #3
    Utente di HTML.it L'avatar di maz85
    Registrato dal
    Mar 2003
    Messaggi
    75
    Grazie, durante la sessione di "googlaggio" non l'ho visto.
    Sembra interessante, ho aggiunto:

    codice:
        Private Declare Function CallWindowProc Lib "user32" _
    Alias "CallWindowProcA" _
    (ByVal wndProc As VarPtrCallbackDelegate, ByRef var As NOMESTRUTTURA, _
    ByVal unused1 As Integer, ByVal unused2 As Integer, _
    ByVal unused3 As Integer) As LONG
    
        Public Function VarPtr(ByRef var As NOMESTRUTTURA) As LONG
            Return CallWindowProc(AddressOf VarPtrCallback, var, 0, 0, 0)
        End Function
    per passare la struttura WaveInCaps.
    Dopo proverò...

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.