MethodNotFound-Exeption...?

04/01/2010 - 01:31 von Gerrit Kuhlendahl | Report spam
Moinsen!

Ich brüte hier grad über einem Problem, das ich nicht verstehe...

Ich rufe über "InvokeMember" zwei Methoden aus einer Klasse auf. Bei der
einen Methode klappt das hervorragend, bei der anderen hingegen kommt eine
MethodNotFound-Ausnahme.

Hierzu mal der Quellkode-Auszug:

[Quellkode]--

'Hier jetzt die Methode aufrufen...
Dim TestStr As String = String.Empty
Try

AddCommon(New ks.Logging.AppLogEntry(KuhSoft.Common.DAP.TlvBinary.Logging.KsLogLevel.TraceDetailed, "Methodenaufruf: """ & _
ReqFctnData.FctName & """", cFktnLog))


Dim WrkTmp As DataAcc.ITmxFunctionClass = Nothing
If HasFktInterf Then
WrkTmp = CType(WorkObj, DataAcc.ITmxFunctionClass)
End If

Dim fctTime As DateTime = Now

'+--
'|
'| Hier steht der eigentliche Funktionsaufruf !!!
'|
'+--
TestStr = FktInf.MemberName
HandleRequest = WorkObj.GetType().InvokeMember(FktInf.MemberName, Reflection.BindingFlags.InvokeMethod, Nothing, WorkObj, FctnParams)

Dim fctTsp As TimeSpan = Now.Subtract(fctTime)
AddCommon(New ks.Logging.AppLogEntry(KuhSoft.Common.DAP.TlvBinary.Logging.KsLogLevel.All, "[!DAUER]: " & _
fctTsp.TotalMilliseconds.ToString("#,##0") & " ms. -> Methodenaufruf: """ & _
ReqFctnData.FctName & """", cFktnLog))
_LastProcessLasting = fctTsp


If WrkTmp IsNot Nothing Then
_ProgRetStruct = WrkTmp.ProgRespStruct

If WrkTmp.LastException IsNot Nothing Then
_LastExcept = New DataAcc.TmxFctnHdlWorkingException("Bei der Ausführung der angeforderten Funktion trat ein nicht unvorhergesehener Fehler auf!", ReqFctName, cFktnBez, WrkTmp.LastException)
AddError(_LastExcept)
HandleRequest = Nothing
AddCommon(New ks.Logging.AppLogEntry(KuhSoft.Common.DAP.TlvBinary.Logging.KsLogLevel.WaringsHeavy, "Funktionsabbruch nach Fehler", cFktnLog))
_LastActionLasting = Now.Subtract(TimeMessure)
Exit Function
End If
End If
Catch ex As Exception

'Nur temp. zur Suche, warum Methode nicht gefunden wird...
'--
If WorkObj IsNot Nothing Then
'Prüfen, warum die Methode nicht gefunden wird.
Dim x() As System.Reflection.MethodInfo = WorkObj.GetType().GetMethods
Dim s As String = String.Empty
For Each mi As System.Reflection.MethodInfo In x
s &= mi.Name & " --> " & mi.Name.Equals(TestStr).ToString & vbNewLine
Next
MsgBox(s)
End If


_LastExcept = New DataAcc.TmxFctnHdlWorkingException("Bei der Ausführung der angeforderten Funktion trat ein nicht abgefangener Fehler auf!", ReqFctName, cFktnBez, ex)
AddError(_LastExcept)
HandleRequest = Nothing
AddCommon(New ks.Logging.AppLogEntry(KuhSoft.Common.DAP.TlvBinary.Logging.KsLogLevel.WaringsHeavy, "Funktionsabbruch nach Fehler", cFktnLog))
_ProgRetStruct = New TmxResponseStrct(501, "Unerwarteter Fehler beim Ausführen einer Funktion durch das TFM")
_LastActionLasting = Now.Subtract(TimeMessure)
Exit Function
End Try

[/Quellkode]--

Der Witz ist nun folgender: Làuft das Ganze in den Catch-Zweig, wird der Methodenname gefunden und
auch mit TRUE in der MsgBox angezeigt. Auch das Parameter-Feld FctnParams ist vollstàndig und mit
den richtigen Werten belegt.

Hat da jemand vielleicht eine zündende Idee?

Viele Grüße

Gerrit


KUH-SOFT - Die Software von glücklichen Programmierern
 

Lesen sie die antworten

#1 Armin Zingler
04/01/2010 - 02:02 | Warnen spam
Gerrit Kuhlendahl schrieb:
'+--
'|
'| Hier steht der eigentliche Funktionsaufruf !!!
'|
'+--
TestStr = FktInf.MemberName
HandleRequest = WorkObj.GetType().InvokeMember(FktInf.MemberName, Reflection.BindingFlags.InvokeMethod, Nothing, WorkObj, FctnParams)



Und wenn du

... OR System.Reflection.BindingFlags.Instance OR System.Reflection.BindingFlags.Public

ergànzt?

Armin

Ähnliche fragen