vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Bei Verwendung von Invoke wird Exception nicht ausgelöst. 
Autor: sv00010
Datum: 28.07.22 12:13

Ich versuche gerade mit System.Reflection.MethodInfo eine Function aufzurufen.
Das hat soweit auch erstmal funktioniert.
Mein Problem ist, dass keine Exception ausgelöst wird, wo dies bei einer Ausführung ohne Invoke passiert.
Normalerweise wird eine Exception ausgelöst, wenn man versucht zwei Werte vom Typ System.Byte zu einem Gesamtergebnis zu addieren, welches größer ist, als System.Byte.MaxValue.

Die Exception in der Klassnbibliothek "Beispiel" wird nie ausgelöst.
Was mache ich falsch ?

Sub Test5()
        Dim Assembly_Load                       As System.Reflection.Assembly = _
          System.Reflection.Assembly.Load("Beispiel")
 
        Dim Type_Beispiel                       As System.Type = _
          Assembly_Load.GetType("Beispiel.CALCULATION") 
 
        Dim obj_Instance_Beispiel               As System.Object = Nothing
        Dim obj_Result_Invoke                   As System.Object = Nothing
        Dim Array_objects_Invoke(3-1)           As System.Object
        Dim MethodInfo_Addition_Byte            As System.Reflection.MethodInfo _
          = Type_Beispiel.GetMethod("Addition_Byte")
 
        obj_Instance_Beispiel = System.Activator.CreateInstance(Type_Beispiel)
 
        Array_objects_Invoke(0) = CByte(System.Byte.MaxValue)
        Array_objects_Invoke(1) = CByte(System.Byte.MaxValue)
        Array_objects_Invoke(2) = CByte(0)
 
        obj_Result_Invoke = MethodInfo_Addition_Byte.Invoke( _
          obj_Instance_Beispiel, Array_objects_Invoke)
 
    End Sub


Beitrag wurde zuletzt am 28.07.22 um 12:14:08 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bei Verwendung von Invoke wird Exception nicht ausgelöst. 
Autor: Kuno60
Datum: 29.07.22 01:50

Hallo sv00010,

auch über Reflection - Invoke, wird eine OverflowException ausgelöst. Diese wird an TargetInvocationException weitergeleitet.

Mein Test:

Imports System.Reflection
 
Module Module1
 
  Sub Main()
    Dim ergebnis = Test1()
    Stop
  End Sub
 
  Function Test1() As Integer
    Dim t As Type = GetType(Module1)
    Dim mi As MethodInfo = t.GetMethod("Addition_Byte")
    Dim b1, b2 As Byte
    b1 = 250 : b2 = 13 '250 + 13 = Überlauf
    Return CInt(mi.Invoke(Nothing, {b1, b2}))
  End Function
 
  Function Addition_Byte(b1 As Byte, b2 As Byte) As Byte
    Return b1 + b2
  End Function
 
End Module
Wo bei dir der Fehler liegt, kann ich deinem Code nicht entnehmen.

Grüße, Kuno
---------------
Hobbyprogrammierer
VB6 bis VB17

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bei Verwendung von Invoke wird Exception nicht ausgelöst. 
Autor: sv00010
Datum: 29.07.22 11:12

Dein Beispiel hat bei mir in Visual Studio 2017 funktioniert. Es entsteht die Fehlermeldung.
Ich programmiere in Visual Studio 2008, weil ich den Code für ein SmartDevice brauche.
Mir ist aufgefallen, dass ich bei mir die Werte wirklich als Object-Array übergeben muss.
Return CInt(mi.Invoke(Nothing, {b1, b2}))
Das mit dem direkten Erstellen des Bytearray funktioniert bei mir nicht.
Ich vermute, dass das nicht auslösen der Exception damit etwas zu tun haben könnte.

Beitrag wurde zuletzt am 29.07.22 um 11:15:27 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2022 [email protected] Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel