Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Llamar procedimiento por dirección

Estas en el tema de Llamar procedimiento por dirección en el foro de Visual Basic clásico en Foros del Web. Que hay compañeros del foro VB, mi pregunta es de forma puedo llamar a un procedimiento si sólo cuento con su dirección. He visto que ...
  #1 (permalink)  
Antiguo 14/07/2006, 22:15
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Llamar procedimiento por dirección

Que hay compañeros del foro VB, mi pregunta es de forma puedo llamar a un procedimiento si sólo cuento con su dirección. He visto que hay una API que se llama CallWindowProc pero generalmente sólo se usa a la hora de subclasificar ventanas.

La cosa es si hay otra forma de hacerlo, ya que sería algo en que igualar a C/C++. Por su pasiencia, gracias.
__________________
Nunca seas sabio en tu propia opinión.
  #2 (permalink)  
Antiguo 17/07/2006, 18:40
Avatar de [EX3]  
Fecha de Ingreso: marzo-2006
Ubicación: Fuenlabrada, Madrid
Mensajes: 203
Antigüedad: 18 años, 1 mes
Puntos: 1
No se usa solo para subclasificar ventanas, un ejemplo:
Código:
Option Explicit

 Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
 Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
 Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
 Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long

Private Sub Form_Load()
    On Error Resume Next

    Dim lb As Long, pa As Long

    'Cargamos la libreria user32.dll en memoria:
    lb = LoadLibrary("user32")

    'Obtenemos la direccion de la funcion MessageBoxA():
    pa = GetProcAddress(lb, "MessageBoxA")

    'Realizamos una llamada a la funcion MessageBoxA():
    Call CallWindowProc(pa, Me.hWnd, "Hola mundo desde el API de Windows!", "Prueba de CallWindowProc", MB_ICONEXCLAMATION)

    'Descargamos la libreria de la memoria:
    Call FreeLibrary(lb)

 End Sub 
Salu2...
__________________
Proyecto dx_lib32 (http://dxlib32.se32.com) Libreria DLL ActiveX para el desarollo de juegos y programas multimedia en Visual Basic 6.0 con la potencia de DirectX

Dice un dicho que "el que calla otorga". En internet tenemos otro que dice "nunca alimentes a un troll" que viene a decir "dejale hablar solo que se ya se cansara de incordiar". Solo los necios creen tener la razon con la ultima palabra.

  #3 (permalink)  
Antiguo 18/07/2006, 11:43
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Si, pero y si el procedimiento al que quiero llamar tiene mas de 3 argumentos. ¿Como le haría?
__________________
Nunca seas sabio en tu propia opinión.
  #4 (permalink)  
Antiguo 18/07/2006, 15:47
Avatar de [EX3]  
Fecha de Ingreso: marzo-2006
Ubicación: Fuenlabrada, Madrid
Mensajes: 203
Antigüedad: 18 años, 1 mes
Puntos: 1
Pues... buena pregunta, no tengo ni idea

Lo que vagamente me viene a la cabeza ahora mismo es que el propio VB 6.0 disponia de una funcion para llamar a procedimientos por su direccion y que creo que permitia enviar mas de 3 parametros, el tema es que no recuerdo el nombre o peor aun si es que ni existe si quiera (el tema es que me suena de haberlo visto alguna vez). A ver si luego en un rato libre me doy un paseo por la MSDN 6.0 y la encuentro por casualidad por que tambien me interesa.

Salu2...
__________________
Proyecto dx_lib32 (http://dxlib32.se32.com) Libreria DLL ActiveX para el desarollo de juegos y programas multimedia en Visual Basic 6.0 con la potencia de DirectX

Dice un dicho que "el que calla otorga". En internet tenemos otro que dice "nunca alimentes a un troll" que viene a decir "dejale hablar solo que se ya se cansara de incordiar". Solo los necios creen tener la razon con la ultima palabra.

  #5 (permalink)  
Antiguo 19/07/2006, 11:36
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo

Lo intente con el CallWindowProc pero con mi Sub, y me da un error de sistema, a de ser porque los tipos de datos Any no los asimila muy bien el VB6.

De todas formas si de casualidad encuentras algo en el MSDN ¿me avisas?, gracias.
__________________
Nunca seas sabio en tu propia opinión.
  #6 (permalink)  
Antiguo 19/07/2006, 19:37
Avatar de [EX3]  
Fecha de Ingreso: marzo-2006
Ubicación: Fuenlabrada, Madrid
Mensajes: 203
Antigüedad: 18 años, 1 mes
Puntos: 1
Cita:
Iniciado por [EX3]
Lo que vagamente me viene a la cabeza ahora mismo es que el propio VB 6.0 disponia de una funcion para llamar a procedimientos por su direccion(...)
Vale, me equivoque. La funcion que yo recordaba es CallByName y es para llamar, como su propio nombre dice, procedimientos por nombre. En fin, que no es lo que lo que buscamos me temo.

Salu2...
__________________
Proyecto dx_lib32 (http://dxlib32.se32.com) Libreria DLL ActiveX para el desarollo de juegos y programas multimedia en Visual Basic 6.0 con la potencia de DirectX

Dice un dicho que "el que calla otorga". En internet tenemos otro que dice "nunca alimentes a un troll" que viene a decir "dejale hablar solo que se ya se cansara de incordiar". Solo los necios creen tener la razon con la ultima palabra.

  #7 (permalink)  
Antiguo 20/07/2006, 09:57
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Bueno, ni modos. Pero si alguén sabe como hacerlo por favor que nos informe. Gracias.
__________________
Nunca seas sabio en tu propia opinión.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:56.