Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Come si dichiarano ed usano le API in VB.Net? Ho provato con "GetAsyncKeyState"

    Non ho mai utilizzato le api in vb.net:
    Volevo sapere se sbaglio nel dichiarare l' API o se l' errore dipende da altro.

    Questo è il codice:

    codice:
    Public Class Form1
    
        'E' giusta qui la dichiarazione?
        Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
    
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim R As Integer
            R = GetAsyncKeyState(Keys.CapsLock) 'qui mi da l' errore *
            If R < 0 Then MsgBox("CapsLock è Attivato")
        End Sub
    
    End Class
    * Quando chiamo la funzione con GetAsyncKeyState ottengo questo errore:

    Una chiamata alla funzione PInvoke 'prjGetAsyncKeyState!prjGetAsyncKeyState.Form1::Ge tAsyncKeyState' ha sbilanciato lo stack. Questo problema può verificarsi quando la firma PInvoke gestita non corrisponde alla firma di destinazione non gestita. Verificare che la convenzione di chiamata e i parametri della firma PInvoke corrispondano alla firma di destinazione non gestita.
    Qualcuno mi può aiutare?
    jabjoint

  2. #2
    vKey deve essere dichiarato come Integer, non come Long.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ti ringrazio, ma come mai l' APITextView me la con il tipo Long se è corretto usarla con integer?
    jabjoint

  4. #4
    Perché l'API Viewer ti da dichiarazioni per VB6, in cui i tipi di dati sono diversi:
    codice:
    VB6          VB.NET
    Byte         Byte (System.Byte)
    Integer      Short (System.Int16)
    Long         Integer (System.Int32)
    n.d.         Long (System.Int64)
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    hai ragione me l' ero dimenticato, ma sai se c' è un' apiview direttamente per vb.net?
    Giusto per evitare confusioni ogni volta e risparmiare tempo.
    jabjoint

  6. #6
    No, ma francamente fai prima a leggere direttamente dal Platform SDK le dichiarazioni delle API in C e a convertirle in VB.NET... si fa prima.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.