Announcement

Collapse
No announcement yet.

SetUnhandledExceptionFilter ERROR

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SetUnhandledExceptionFilter ERROR

    Hallo!
    Ich bin noch relativ neu in VB und komme an einer Stelle nicht weiter.
    Ich möchte gerne die Funktion
    SetUnhandledExceptionFilter() aus der Windows-API benutzen. Soweit so gut, aber beim Aufruf kriege ich immer folgende Fehlermeldung:
    Der Ausdruck "AddressOf" kann nicht in "Long" umgewandelt werden, da er kein Delegattyp ist.

    Der Funktionsaufruf sieht wie folgt aus:

    SetUnhandledExceptionFilter(AddressOf Me.MyExceptionHandler)

    Public Function MyExceptionHandler(ByVal lpEP As EXCEPTION_POINTERS) As Long
    'Show the WindowsXP Error Reporting dialog
    ReportFault(lpEP, 0)
    'Continue execution
    MyExceptionHandler = EXCEPTION_CONTINUE_EXECUTION
    End Function

    Wie sieht der Aufruf richtig aus?
    Ich möchte gerne erreichen, dass bei nichtbehandelten Fehlern immer die Methode MyExceptionHandler aufgerufen wird.
    Hab mich schon schlau gemacht, was ein Delegattyp überhaupt ist, aber da bin ich nicht ganz durchgestiegen. Wäre super, wenn mir hier jemand weiterhelfen kann. (Ich vermute, dass es nur eine Kleinigkeit ist)
    Vielen Dank!

    Gruß

    Matthias

  • #2
    Hallo,

    das folgende Beispiel für die Win32-API-Funktion EnumWindows verdeutlicht das Prinzip:
    <pre>
    Delegate Function EnumWindowsCallback(ByVal hWnd As Integer, ByVal lParam As Integer) As Integer
    <br>
    Public Declare Ansi Function EnumWindows Lib "User32" (ByVal proc As EnumWindowsCallback, _
    ByVal pval As Integer) As Integer
    Public Declare Ansi Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hWnd As Integer, _
    ByVal WindowName As String, ByVal BufferLength As Integer) As Integer
    <br>
    Public Function DoEnumWindowNamesCallback(ByVal hWnd As Integer, ByVal lParam As Integer) As Integer
    Dim sWndName As New String(Chr(32), 255)
    Dim sName As String
    GetWindowText(hWnd, sWndName, 254)
    sName = Microsoft.VisualBasic.Left$(sWndName, InStr(sWndName, Chr(0)) - 1)
    If sName <> "" Then ListBox1.Items.Add(sName)
    Return (1)
    End Function
    <br>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    EnumWindows(AddressOf DoEnumWindowNamesCallback, 0)
    End Sub
    </pre&gt

    Comment

    Working...
    X