Buenos dias. Me pregunto porque se ha cerrado un hilo del que estoy tremendamente interesado e inmerso. La ultima vez que se estuvo charlando en él es de mayo del 2010. Casi un año despues un usuario a posteado una solucion a un problema que me trae de cabeza, de perdida de pulsaciones de teclado. Al parecer la solucion pasa por cambiar los tipos de datos de una API de Windows, para no desestabilizar la pila, y asi lo ha posteado incluyendo el link a Microsoft donde lo explican. Mi problema es que estoy usando VB6 y la solucion es para NET. Queria preguntarle a Sash, que fue quien posteo la solucion, que modificacion hay que hacer en la declaracion de la API, para que funcione en VB6, ya que el error que me tira es: "No se ha definido el tipo definido por el usuario"

Él posteo lo siguiente y luego cerraron el tema, sin poder preguntarle. No se que criterio siguieron para ello, pero un hilo con casi 1800 visitas me parece de interes, sobre todo porque los usuarios que postearon el él son usuarios activos y que postean regularmente (al menos en mi caso). No quiero con esto que denuncio que piensen los moderadores que estoy enfadado o molesto por el cierre del tema, sino que no lo entendí, y como me interesa resolver este tema, pues por eso abro este hilo-protesta-consulta. Aqui dejo lo que Sash respondio:


Hola!

Sé que es muy tarde para responder, pero comentar que al menos en VB 2010, la delcaración de la funcion "GetAsyncKeyState" de la librería user32.dll debe ser así para evitar el error de desestabilización de la pila:


vb Código:

1.
Private Declare Function GetAsyncKeyState Lib "user32" _
2.
(ByVal vKey As Integer) As Short


Pasamos a la función un Integer, no un Long.
La función nos devuelve un Short, no un Integer.

de acurdo con la siguiente definición dada por microsoft:


GetAsyncKeyState Function (Windows)


Un saludo. Espero que sirva de algo, ya que a mi me llevo un día de lamentos hasta darme cuenta de este error.



A continuacion os pongo la declaracion tal y como funciona en VB6 y tal y como Microsoft aconseja se haga en NET:

Para VB6
Código:
  1. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Para NET
Código:
  1. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
Como veis el cambio es minimo, y solo afecta al tipo de datos usado. Se puede solucionar para VB6. Es un engorro tremendo perder pulsaciones de teclado cuando el Timer de refresco es de intervalos pequeños. Gracias a todos.