테스트 코드 :여기 방법
Public Class Class2
Public GoodName as String
Public Function someFunction()
End Function
End Class
Public Class Class1
Public Enum ENUM_VAL1_
abc = 1
def = 2
End Enum
Public Enum ERROR_VAL1_
yhn = 1
ujm = 2
End Enum
Public Function fun1(byval _enumArg1 as ENUM_VAL1_,
byval _stringArg as String,
byref _classArg Class2) as ERROR_VAL1_
... SOMETHING HERE
return something
End Function
End Class
시험
Dim asm As Assembly = Assembly.LoadFrom(<the source>)
If asm Is Nothing Then Return Nothing
Dim typ As Type = asm.GetType(<namespace>.<class1>)
If typ Is Nothing Then Return Nothing
Dim obj As Object = Activator.CreateInstance(typ)
If obj Is Nothing Then Return Nothing
Dim arg As Object() = New Object() {ENUM_VAL1_.abc, "qazxsw", New Class2}
Dim res As Object = typ.InvokeMember(_
"fun1", _
BindingFlags.[Default] Or BindingFlags.InvokeMethod, _
Nothing, _
obj, _
arg)
에서 [Dim res As Object = typ.InvokeMember(_ "fun1", _ BindingFlags.[Default] Or BindingFlags.InvokeMethod, _ Nothing, _ obj, _ arg)
] 에러 리턴 : function '[fullname]' not found.
그런 다음 fun1 서명이 내 호출과 다릅니다 (enum 값이 정수 임에도 불구하고). 나는 약간의 연구를 수행했고 대상 어셈블리의 속성이나 함수가 표준 형식과 다른 인수를 가질 때 반사를 구현하는 방법에 대한 "일부"샘플을 발견했습니다. 그러나 나는 그 견본 "개념"을 나의 필요로 번역하는데 성공했다.
여기에서, 문제의 골격을 지적하기 위해 더미 열거 형을 가진 더미 클래스를 몇 개 넣었습니다.
원본 코드는 firewallApi.dll 및 Hnetcfg.dll의 유형을 포함하여 많은 열거 값이있는 Windows 방화벽/포트 (win7/xp/vista)입니다.
내가 가진 문제는 내가 할 수없는 "InvokeMember에"(또한 "SetProperties를"과 "SetProperties를") 말 사용 : 어셈블리에서 내 기능이 인수 유형이 있습니다
Dim args As Object() = New Object() {"SQL", 6, "1433", 1}
.
Public Function PortExists(_
ByVal _ruleName As String, _
ByVal _protocol As NET_FW_IP_PROTOCOL_, _
ByVal _remotePorts As String, _
ByVal _direction As NET_FW_RULE_DIRECTION_ _
) As FW_ERROR_CODE
좋아, 난 내 자신의 열거 유형
Public Function PortExists(_
ByVal _ruleName As String, _
ByVal _protocol As FW_IP_PROTOCOL, _
ByVal _remotePorts As String, _
ByVal _direction As FW_RULE_DIRECTION _
) As FW_ERROR_CODE
어떻게 든 (추가 설치에 필요한 라이브러리) 인수 '6'과 '1'FW_IP_PROTOCOL
및 FW_RULE_DIRECTION
유형으로 변환해야했다 단순화 각각 ...
나는 어떻게 해야할지 모르겠다!
성취하려는 것을 설명하고 그것이 효과가없는 이유를 설명하십시오. 무슨 일이야? 문제가 무엇입니까? 개체로서는 = typ.InvokeMember –