as Any
no te lo recomiendo en vb6 esta bien pero en la practica es una mala practica, mejor declara TODO como punteros...
byval variable as long
Esto es por que al final practiamente Siempre se termina por obtener el puntero a la variable... ademas evita esos feos Crash que suelen ocurrir sin mera explicacion.
Dulces Lunas!¡.
.
ByVal y Byref esta explicado de alguna manera ante los procesos y funciones personalisados (en la liga y todos han ido directo a este punto mas no al real problema de este hilo, las apis.), es decir, las que creamos o las de vb6 mas no a las APIS, asi que aqui te dejo una explicacion ante esto.:
En las APIS byval y ByRef tienen otra tarea no muy alejada de la que ya se ha explicado, aun que yo recomiendo siempre trabajar con byval ya que al termino se trataran punteros y las referencias pasaran a ser un lobo en la piel de una oveja...
---------->
Puntero/Apuntador --> Es una variable que apunta a la dirrecion de memoria donde se encuentra una dato X.
Las apis no nesesitan crear una Copia de los texto ni nada similar, solo nesesitan el punto de inicio de los datos (puntero), y la longitudad a tratar...
Algunas apis piden referencia?... la referencia esta desde C++ ( en C no he visto una manera de hacer referencia solo con los punteros caso omiso en C++ que esto ya es menos complicado con la referencia, aun que la vdd es la misma borrega solo que con nombre distinto ), pero para ser sincero de alguna manera las referencias terminan a ser punteros.
Cada parametro en el que veas como prefijo "lp" quiere decir que se ESPERAN PUNTEROS. en este caso el api:
Declare Function ReadProcessMemory Lib "kernel32" (
ByVal hProcess As Long, <--- el prefijo "h" indica que se espera un HANDLE.
ByVal lpBaseAddress As Any, <--- el prefijo "lp" indica que se espera un puntero.
lpBuffer As Any, <--- el prefijo "lp" indica que se espera un puntero.
ByVal nSize As Long, <--- el prefijo "n" indica que se espera un entero ( Long(VB6) = int (C) e int(VB6) = short int(C) ).
lpNumberOfBytesWritten As Long <--- el prefijo "lp" indica que se espera un puntero.
) As Long
la api es igual a esta que C
BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess,
__in LPCVOID lpBaseAddress,
__out LPVOID lpBuffer,
__in SIZE_T nSize,
__out SIZE_T *lpNumberOfBytesRead
);
/*
__in <... Esto indica que es un parametro de solo entrada es decir que solo entra pero nada retorna por la misma
__out <... Esto indica que es un parametro de solo SALIDA o de RETORNO sobre el parametro pero que no le importa lo que tenga anteriormente.
__in y __out, Estos no se escriben aun que podrian representar de alguna manera:
__in = byval
__out = byref
**/
De hecho es mejor Declarar las apis a conforme a sus prototipos Predefenidos... es decir que la declaracion api deberia ser:
Declare Function ReadProcessMemory Lib "kernel32" (
ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
ByVal lpBuffer As Long, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long) As Long
pero como ya dije al final se pasaran lso punteros... es decir que lo correcto deberia de ser:
Declare Function ReadProcessMemory Lib "kernel32" (
ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
ByVal lpBuffer As Long, _
ByVal nSize As Long, _
Byval lpNumberOfBytesWritten As Long) As Long
Estos prefijos ( "lp","sz","n","l", ... , "?" , ... ) se les conoce como declaracion hungara ( yo tengo la propia en C pero bueno no es dificil comprenderla en google encuentras un poco de informacion extra ).
Dulces Lunas!¡.