Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970

    [VB.NET] Da VB6 a VB.Net

    Ho qualche difficoltà a tradurre questo passaggio:

    codice:
    Function OnNewFrame(ByRef Buffer As Byte, ByVal FrameCounter As Long) As Long
    Dim x As Integer, y As Integer, n As Integer
    Dim c1 As Long, c2 As Long, d As Long, e As Long
    Dim R As Byte, G As Byte, B As Byte
    
    On Error GoTo OnNewFrameM1
        Call CopyMem(Arr(0, 0), Buffer, Size * 2)
    
    'Resto del codice
      
    End Function
    Ok il parametro Buffer è un puntatore al buffer che contiene una matrice bidimensionale di un'immagine.
    Come traduco quel:

    codice:
     CopyMem(Arr(0, 0), Buffer, Size * 2)
    in VB.net?

    Grazie mille
    Sbagliare è umano, perseverare è diabolico.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma CopyMem cosa è nel programma VB6 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    codice:
    Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La copia diretta dalla memoria non è utilizzabile per vettori/matrici .NET ...

    Prova a leggere questo

    http://www.codeproject.com/KB/vb/CopyMemory_in_Net.aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ci do un'occhiata, grazie
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Non ci siamo...

    Dunque per capire bene come funziona il tutto mi sono costruito una .dll in C++ con questa semplice funzione.

    codice:
     __declspec(dllexport) int* fnwrapper_intarr()
    {
        int* test = new int[3];
    
        test[0] = 44;
        test[1] = 64;
        test[2] = 56;
    
        return test;
    }
    Ovviamente in Vb.Net la dichiaro:

    codice:
    <DllImport("Elaboration.dll")> _
        Public Function fnwrapper_intarr() As IntPtr
        End Function
    e poi la utilizzo.

    codice:
    Dim myaddress As IntPtr = fnwrapper_intarr()
    
    Dim result(2) As Byte
     Marshal.Copy(myaddress, result, 0, 3)
    Ok, nella mia matrice result compare solo il primo elemento, ovvero 44, il secondo e il terzo zero.

    Dove sbaglio?
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Non so se sia corretto ma in questo modo mi ritorna la matrice intera:

    codice:
     __declspec(dllexport) int* fnwrapper_intarr()
    {
        int* test = new int[3];
    
        test[0] = 44;
        test[1] = 64;
        test[2] = 56;
    
        return test;
    }
    codice:
      Dim myaddress As IntPtr = fnwrapper_intarr()
                Dim result(2) As Byte
               
                Dim tempAddress As Integer = myaddress.ToInt32
    
                For i As Integer = 0 To 2
                    myaddress = New IntPtr(tempAddress)
                    Marshal.Copy(myaddress, result, i, 1)
                    tempAddress = myaddress.ToInt32 + 4
                Next
    Sbagliare è umano, perseverare è diabolico.

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.