关于反射加载DLL的问题2
2008-12-25 20:29
302 查看
关于反射加载DLL的问题2
下面一段程序,大家帮忙看下
Public Overrides Function Read() As ClsRFIDTag
Dim Data(ClsRFIDTag.TagLengthBytes - 1) As Byte
If LoadDll(ClsRFIDTag.TagLengthBytes, Data) Then
Return New ClsRFIDTag(Data)
End If
Return Nothing
End Function
Private Function LoadDll(ByVal NumBytes As Integer, ByRef Data As Byte()) As Boolean
Dim assem As System.Reflection.Assembly
Dim obj As Object
Dim htype As Type
Dim meth As MethodInfo
Dim ReturnData As Boolean
Dim Parameter(1) As Object
Parameter(0) = NumBytes
Parameter(1) = Data
assem = System.Reflection.Assembly.LoadFrom(Var.RFID_DllPath)
htype = assem.GetType("ClassLibrary1.ARE") 'dll Namespace und der Name von Class
meth = htype.GetMethod("ReadBytes") ' Name der Funktion
obj = Activator.CreateInstance(htype)
ReturnData = meth.Invoke(obj, Parameter)
Return ReturnData
End Function
Dll的程序
Public Class ARE
Private Const MyPortName As String = "COM2" 'IO.Ports.SerialPort.GetPortNames(0)
Private Const MyTagBlockOffset As Integer = 20 'first block to read/write
Private MyPort As IO.Ports.SerialPort
Public Function ReadBytes(ByVal NumBytes As Integer, ByRef Data As Byte()) As Boolean
SendCommand("RST")
Try
Dim Ret As Boolean = True
For I As Integer = 0 To Fix(NumBytes / 4 + 0.99) - 1
Dim S As String = SendCommand("RD " & I + MyTagBlockOffset, True)
If S.Length < 8 Then
Ret = False
Exit For
End If
For J As Integer = 0 To 3
Data(4 * I + J) = Byte.Parse(S.Substring(2 * J, 2), Globalization.NumberStyles.HexNumber)
Next
Next
Return Ret
Catch ex As Exception
Return False
End Try
End Function
Private Function SendCommand(ByVal Cmd As String, Optional ByVal xReadData As Boolean = False) As String
MyPort.DiscardInBuffer()
MyPort.DiscardOutBuffer()
MyPort.WriteLine(Cmd)
If xReadData Then
Try
Return MyPort.ReadLine()
Catch ex As Exception
'timeout
Return ""
End Try
Else
Return ""
End If
End Function
End Class
整个程序如果不用dll动态加载的话,原来没有任何问题,现在在ReturnData = meth.Invoke(obj, Parameter)这句报错Exception has been thrown by the target of an invocation.
想问问大家可能使那里的问题??
__________________________________________________________________________
学习,Exception has been thrown by the target of an invocation 后面应该还有提示吧。。
__________________________________________________________________________
检查参数,以及是否有STATIC成员对象。
另外检查你的OBJ对象是否正确。
__________________________________________________________________________
==>ReturnData = meth.Invoke(obj, Parameter)
如果是这一句用抛出的异常,需要检查这个异常的InnerException,可能可以获得更详细的异常信息。
__________________________________________________________________________
mark
__________________________________________________________________________
InnerException 里面
system.Nullreferanzexception是对象没有实例华
innerexeeption是nothing
这说明错误是对象没有实力话吗?
__________________________________________________________________________
下面一段程序,大家帮忙看下
Public Overrides Function Read() As ClsRFIDTag
Dim Data(ClsRFIDTag.TagLengthBytes - 1) As Byte
If LoadDll(ClsRFIDTag.TagLengthBytes, Data) Then
Return New ClsRFIDTag(Data)
End If
Return Nothing
End Function
Private Function LoadDll(ByVal NumBytes As Integer, ByRef Data As Byte()) As Boolean
Dim assem As System.Reflection.Assembly
Dim obj As Object
Dim htype As Type
Dim meth As MethodInfo
Dim ReturnData As Boolean
Dim Parameter(1) As Object
Parameter(0) = NumBytes
Parameter(1) = Data
assem = System.Reflection.Assembly.LoadFrom(Var.RFID_DllPath)
htype = assem.GetType("ClassLibrary1.ARE") 'dll Namespace und der Name von Class
meth = htype.GetMethod("ReadBytes") ' Name der Funktion
obj = Activator.CreateInstance(htype)
ReturnData = meth.Invoke(obj, Parameter)
Return ReturnData
End Function
Dll的程序
Public Class ARE
Private Const MyPortName As String = "COM2" 'IO.Ports.SerialPort.GetPortNames(0)
Private Const MyTagBlockOffset As Integer = 20 'first block to read/write
Private MyPort As IO.Ports.SerialPort
Public Function ReadBytes(ByVal NumBytes As Integer, ByRef Data As Byte()) As Boolean
SendCommand("RST")
Try
Dim Ret As Boolean = True
For I As Integer = 0 To Fix(NumBytes / 4 + 0.99) - 1
Dim S As String = SendCommand("RD " & I + MyTagBlockOffset, True)
If S.Length < 8 Then
Ret = False
Exit For
End If
For J As Integer = 0 To 3
Data(4 * I + J) = Byte.Parse(S.Substring(2 * J, 2), Globalization.NumberStyles.HexNumber)
Next
Next
Return Ret
Catch ex As Exception
Return False
End Try
End Function
Private Function SendCommand(ByVal Cmd As String, Optional ByVal xReadData As Boolean = False) As String
MyPort.DiscardInBuffer()
MyPort.DiscardOutBuffer()
MyPort.WriteLine(Cmd)
If xReadData Then
Try
Return MyPort.ReadLine()
Catch ex As Exception
'timeout
Return ""
End Try
Else
Return ""
End If
End Function
End Class
整个程序如果不用dll动态加载的话,原来没有任何问题,现在在ReturnData = meth.Invoke(obj, Parameter)这句报错Exception has been thrown by the target of an invocation.
想问问大家可能使那里的问题??
__________________________________________________________________________
学习,Exception has been thrown by the target of an invocation 后面应该还有提示吧。。
__________________________________________________________________________
检查参数,以及是否有STATIC成员对象。
另外检查你的OBJ对象是否正确。
__________________________________________________________________________
==>ReturnData = meth.Invoke(obj, Parameter)
如果是这一句用抛出的异常,需要检查这个异常的InnerException,可能可以获得更详细的异常信息。
__________________________________________________________________________
mark
__________________________________________________________________________
InnerException 里面
system.Nullreferanzexception是对象没有实例华
innerexeeption是nothing
这说明错误是对象没有实力话吗?
__________________________________________________________________________
相关文章推荐
- 关于java加载dll文件一直报Unable to load library的问题
- 关于内存加载DLL后修复重定位的问题
- 关于DLL加载的问题
- 关于VS2010 rcxdti.dll is unable to load rcxdtiui.dll加载失败问题的解决方案
- 关于无法加载DLL"***.dll":找不到指定的模块(异常来自HRESULT:0x8007007E)问题的解决办法
- C#关于反射加载的问题
- 还是关于无法加载DLL(OCI.DLL)问题解决办法!
- 关于同一个dll被多个进程加载的共享问题
- 关于DLL多次加载、卸载后。dll中创建窗口崩溃问题的解决。
- .net关于反射加载机制问题
- 关于DLL路径加载顺序的问题
- 关于Windows平台下应用程序加载DLL模块的问题.
- 关于内存加载DLL后修复重定位的问题
- 关于DLL路径加载顺序的问题
- 关于Windows平台下应用程序加载DLL模块的问题.
- 关于delphi在DLL中使用TStyleManager加载皮肤ListView的问题
- 关于动态加载dll问题
- 关于VS.NET中多个项目的工程相互引用和多个dll引用的问题!
- 关于1>LINK : fatal error LNK1168: 无法打开 ....exe或者....dll进行写入的问题