elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Re: Arreglo como parametro Generico(Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Re: Arreglo como parametro Generico(Solucionado)  (Leído 4,367 veces)
ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Arreglo como parametro Generico(Solucionado)
« en: 29 Abril 2011, 05:09 am »

Bueno, que tal!

Tengo una funcion para detectar cuando un arreglo es nulo, el problema que para cada tipo de dato del arreglo tengo que diseñar una nueva funcion. Me gustaria crear una funcion para cualquier tipo de dato, como podria hacerlo?

Código
  1. function isArrayNullEntero(arreglo() as integer) as boolean
  2. ...
  3. end function
  4.  
  5. function isArrayNullNuevoTipo(arreglo() as nuevotipo) as boolean
  6. ...
  7. end function
  8.  


« Última modificación: 30 Abril 2011, 06:27 am por ignorantev1.1 » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Arreglo como parametro Generico(Ayuda)
« Respuesta #1 en: 29 Abril 2011, 12:21 pm »

Código
  1.  
  2. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
  3. Private Declare Function VarPtrA Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
  4.  
  5. Private Function ItsArrayIni(ByVal lngPtr As Long, Optional LnBytes As Long = 4) As Boolean
  6. Dim lng_PtrSA                   As Long
  7.    If lngPtr <> 0 And LnBytes > 0 Then
  8.        Call CopyMemory(ByVal VarPtr(lng_PtrSA), ByVal lngPtr, LnBytes)
  9.        ItsArrayIni = Not lng_PtrSA = 0
  10.    End If
  11. End Function
  12.  
  13. '//uso:
  14.  
  15. if (ItsArrayIni(VarPtrA(iArray()))) then
  16. ' Haz algo...
  17. end if
  18.  

Temibles Lunas!¡.


En línea

The Dark Shadow is my passion.
ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Arreglo como parametro Generico(Solucionado)
« Respuesta #2 en: 29 Abril 2011, 17:25 pm »

Que bien compadre!
Gracias, es perfecto!  ;)
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Arreglo como parametro Generico(Ayuda)
« Respuesta #3 en: 29 Abril 2011, 20:45 pm »

HOLA!!!

Vi a karcrack hacer este codigo para ver eso:

Código
  1. dim b() as variant ' o el tipo que sea
  2. If (Not Not b) = False Then '
  3. 'no se inicializo (hay que dimensionarlo)
  4. Else
  5. 'esta inicializado
  6. End If
  7.  

GRACIAS POR LEER!!!
« Última modificación: 29 Abril 2011, 20:52 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: Arreglo como parametro Generico(Ayuda)
« Respuesta #4 en: 29 Abril 2011, 21:25 pm »

También con el truco del NotNot podemos comprobar si está iniciado el array:
Código
  1. If Not Not iArray Then
  2.    '// Haz algo...
  3. End If

Es la forma más rápida, en el IDE puede dar problemas pero compilado funciona 100%.
Para prevenir el bug en el IDE haz:
Código
  1. Private Form_Load()
  2. Dim IDEbug&()
  3.    '// Prevenir el NotNot bug.
  4.    Debug.Assert Not IDEbug Or App.hInstance
  5. End Sub

Código:
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
:-\

DoEvents! :P
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Arreglo como parametro Generico(Ayuda)
« Respuesta #5 en: 29 Abril 2011, 23:22 pm »

Es que la idea original era esta:

Código
  1. Private Function isArrayNull(tarray() As integer) As Boolean
  2.    Dim i As Integer
  3.    On Error GoTo tError
  4.    i = UBound(tarray)
  5.    Exit Function
  6. tError:
  7.    isArrayNullAnimal = True
  8. End Function
  9.  
  10. Private Sub Form_Load()
  11.    Dim a() as Integer
  12.    Msgbox isArrayNull(a)
  13. End Sub
  14.  

El problema es que para un array String(por ejemplo) tendria que cambiar el tipo recibido a String... Pero con lo de Black esta solucionado... salud!
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Arreglo como parametro Generico(Ayuda)
« Respuesta #6 en: 30 Abril 2011, 05:48 am »

en este post ya se hablo del tema:

coo saber si existe una variante?
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Re: Arreglo como parametro Generico(Solucionado)
« Respuesta #7 en: 30 Abril 2011, 10:42 am »

.
No les recomiedno usar Not para ver si esta inicializada la variable , en codigos largos y complejos causa errores muy desagradables es por eso que le di el codigo de CopyMemory.

Edito------>


Es la forma más rápida, en el IDE puede dar problemas pero compilado funciona 100%.
Para prevenir el bug en el IDE haz:


Extraño a mi con mi ctl  ListViewEx compilado o no, me dio bastantes errores... que se solucionaban separando un monton de variables, haciendo los cats, reduciendo operaciones uff... muchos errores.

El error exacto era:

Expresión Demasiado compleja


@seba123neo

En esa liga, el código que esta ( el que publiscaste ) es bueno pero hace demasiadas cosas ya que un array dinámico NULO (sin dimensiones) es un apuntador de 4 bytes ( aqrquitectura 32bytes lo digo solo como dato general ) del mismo apuntando a la estructura SafeArray dado que si no existe ( puntero NULO ) es que no esta inicializado el array, en caso contrario se apuntaría al SafeArray y simplemente usaríamos Ubound() y Lbound() que es lo mismo que en aquel código de la liga otorgas pero el caso no es saber las dimensiones ni los estados si no mas bien saber si esta inicializado o no el array o mejor dicho saber si ya hay memoria reservada para el mismo.

* Los array con declaración estática no apuntan al safearray de echo el puntero de la variable es a esta estructura...

Código
  1.  
  2. typedef struct FARSTRUCT tagSAFEARRAY {
  3.   unsigned short cDims;       // Count of dimensions in this array.
  4.   unsigned short fFeatures;   // Flags used by the SafeArray
  5.                        // routines documented below.
  6. #if defined(WIN32)
  7.   unsigned long cbElements;   // Size of an element of the array.
  8.                        // Does not include size of
  9.                        // pointed-to data.
  10.   unsigned long cLocks;      // Number of times the array has been
  11.                        // locked without corresponding unlock.
  12. #else
  13.   unsigned short cbElements;
  14.   unsigned short cLocks;
  15.   unsigned long handle;      // Used on Macintosh only.
  16. #endif
  17.   void HUGEP* pvData;             // Pointer to the data.
  18.   SAFEARRAYBOUND rgsabound[1];      // One bound for each dimension.
  19. } SAFEARRAY;
  20.  
  21.  

.. en todo caso lo que importa es solo saber si ya tiene memoria reservada (Inicializado)... pero bueno. Mas Info SafeArray.

Temibles Lunas!¡.
« Última modificación: 30 Abril 2011, 11:12 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: Arreglo como parametro Generico(Solucionado)
« Respuesta #8 en: 30 Abril 2011, 10:44 am »

.
No les recomiedno usar Not para ver si esta inicializada la variable , en codigos largos y complejos causa errores muy desagradables es por eso que le di el codigo de CopyMemory.

Dulces Lunas!¡.
¿Compilado también? :huh:

DoEvents! :P
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Re: Arreglo como parametro Generico(Solucionado)
« Respuesta #9 en: 30 Abril 2011, 11:03 am »

Si, de hecho lo tenia co Not(Not array) en todo caso prefiero ya hacerlo bien xP evitando el uso de not para estas cosas... al igual que LSet y otras cosillas que en proyectos medianos a grandes me han dado problemas

P.D.:

Código
  1.  
  2.  
  3. Option Explicit
  4.  
  5. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
  6. Private Declare Function VarPtrA Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
  7.  
  8. Private Function ItsArrayIni(ByVal lngPtr As Long, Optional LnBytes As Long = 4) As Boolean
  9. Dim lng_PtrSA                   As Long
  10.    If lngPtr <> 0 And LnBytes > 0 Then
  11.        Call CopyMemory(ByVal VarPtr(lng_PtrSA), ByVal lngPtr, LnBytes)
  12.        ItsArrayIni = Not lng_PtrSA = 0
  13.    End If
  14. End Function
  15.  
  16. Private Sub Form_Load()
  17. Dim aVar() As Integer
  18.    MsgBox ItsArrayIni(VarPtrA(aVar()))
  19.    ReDim aVar(0 To 10)
  20.    MsgBox ItsArrayIni(VarPtrA(aVar()))
  21.    Erase aVar()
  22.    MsgBox ItsArrayIni(VarPtrA(aVar()))
  23. End Sub
  24.  
  25.  

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema: insertar palabras en un arreglo en C# [solucionado]
.NET (C#, VB.NET, ASP)
andiuri 7 18,683 Último mensaje 16 Mayo 2012, 21:37 pm
por J3RRYG3
problemas metodo con parametro (solucionado) era sin parametro XD
Java
rub'n 6 6,920 Último mensaje 25 Noviembre 2010, 16:45 pm
por Afsoon
[SOLUCIONADO] Pasar array como parámetro.
Java
NetJava 3 23,210 Último mensaje 15 Febrero 2011, 21:55 pm
por Debci
Enviar JFrame como parametro[Solucionado]
Java
darmorir 2 3,463 Último mensaje 10 Noviembre 2014, 16:40 pm
por darmorir
[Solucionado]Como puedo mezclar un arreglo
Java
PabloPbl 4 7,298 Último mensaje 6 Febrero 2015, 22:47 pm
por PabloPbl
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines