Fehler beim Debuggen ( API - Deklaration ? )

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Fehler beim Debuggen ( API - Deklaration ? )

    Hey @ all,

    ich hab mal wieder ein größeres Problem. Und zwar bekomme ich immer diese Fehlermeldung beim Debuggen:




    Hier der Code dazu :

    Spoiler anzeigen



    Option Explicit On

    Public Class Form1
    Dim x_Timer As New xtimer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    x_Timer.Calibrieren()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    warten(5000)
    End Sub

    Public Sub warten (ByVal zeit)
    ' Wartet 'zeit' Millisekunden bis es zurück kommt


    x_Timer.Start()
    Do
    x_Timer.Halt()
    Beep()
    Loop Until x_Timer.RunTime >= zeit

    End Sub



    End Class


    Public Class xtimer

    'Deklaration: Globale Klassen API-Typen
    Private Structure LARGE_INTEGER
    Dim Lo As Long
    Dim Hi As Long
    End Structure

    'Deklaration: Globale Klassen API-Funktionen
    Private Declare Function QueryPerformanceCounter Lib "kernel32" ( _
    ByVal lpPerformanceCount As LARGE_INTEGER) As Long

    Private Declare Function QueryPerformanceFrequency Lib "kernel32" ( _
    ByVal lpFrequency As LARGE_INTEGER) As Long

    'Deklaration: Globale Klassen-Variablen
    Dim dblCalibrieren As Double

    Dim udtStart As LARGE_INTEGER
    Dim udtEnde As LARGE_INTEGER
    Dim udtFreq As LARGE_INTEGER

    Public Sub Calibrieren()
    Call QueryPerformanceCounter(udtStart)
    Call QueryPerformanceCounter(udtEnde)

    dblCalibrieren = (D(udtEnde) - D(udtStart)) / D(udtFreq) * 1000
    End Sub

    Sub New()
    Call QueryPerformanceFrequency(udtFreq)
    End Sub

    Public Sub Halt()
    Call QueryPerformanceCounter(udtEnde)
    End Sub

    Public Sub Start()
    Call QueryPerformanceCounter(udtStart)
    End Sub

    Public ReadOnly Property RunTime() As Double
    Get
    RunTime = (D(udtEnde) - D(udtStart)) / D(udtFreq) * 1000 - dblCalibrieren
    End Get

    End Property


    Private Function D(ByVal udtX As LARGE_INTEGER) As Double
    'Deklaration: Lokale Prozedur-Variablen
    Dim dblHigh As Double
    Dim dblLow As Double

    dblLow = udtX.Lo
    dblHigh = udtX.Hi

    If dblLow < 0 Then
    dblLow = 4294967296.0# + dblLow + 1
    End If

    If dblHigh < 0 Then
    dblHigh = 4294967296.0# + dblHigh + 1
    End If

    D = dblLow + dblHigh * 4294967296.0#

    End Function




    End Class



    Angeblich soll das ganze unter VB6 laufen, allerdings habe ich VB10.
    Kann mir vielleicht jemand helfen, den Code auch unter VB10 zum laufen zu bringen ?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Tizi93“ ()

    Deine Signaturen stimmen nicht, was Dir wohl auch klar war.

    Für API's ist für mich die Seite PInvoke.NET die Referenz: ausser den Signaturen in VB.NET und C# sind meist meist auch Anwendungsbeispiele aller WinAPI's gelistet.

    Beispiel QueryPerformanceCounter:

    VB.NET-Quellcode

    1. VB.NET Signature:
    2. <DllImport("kernel32.dll", SetLastError:=True)> _
    3. Shared Function QueryPerformanceCounter(ByRef lpPerformanceCount As Long) As Boolean
    4. End Function
    Ich hab die Lösung:

    Dim stp as new Stopwatch

    Die verwendet nämlich (falls vorhanden) den HPT.

    s.auch:
    msdn.microsoft.com/de-de/libra…iagnostics.stopwatch.aspx
    Die Stopwatch misst verstrichene Zeit, indem sie die Ticks des Zeitgebers im zugrunde liegenden Zeitgebermechanismus zählt.Wenn die installierte Hardware und das Betriebssystem einen hochauflösenden Leistungsindikator unterstützen, wird dieser von der Stopwatch-Klasse zum Messen der verstrichenen Zeit verwendet.Andernfalls verwendet die Stopwatch-Klasse den Systemzeitgeber, um die verstrichene Zeit zu messen.Mit den Feldern Frequency und IsHighResolution können Sie die Präzision und Auflösung der Stopwatch-Zeitgeberimplementierung bestimmen.
    Vielen Dank für euer Antworten, allerdings bin ich in VB noch sehr unsicher und ungeübt. Könnte mir vielleicht einer von euch den Code umschreiben, damit ich ihn verstehe.
    Ich habe es selber versucht, es kommen aber immer noch die Fehlermeldungen.