2013-08-28 3 views
-1

DLL이 첨부 된 프로그램의 기능에 액세스하고 싶습니다.DLL에서 프로그램 어셈블리 가져 오기

는 DLL에서 나는 시도했다 :

Assembly assembly = Assembly.GetExecutingAssembly(); 
Type type = assembly.GetType("Uranium"); 
MethodInfo methodInfo = type.GetMethod("Util"); 

methodInfo.Invoke("SendClient", new object[] { Packet.GetData()}); 

하지만 작품은 내가 널 예외가 있지만 라인을 말하지. 실행중인 프로그램이 호출되었으며 namespace가 'Uranium'이고 클래스가 'Util'이고 함수가 'SendClient'입니다.

+0

당신은 어떤 예외를받을 수 있나요? – Ehsan

+0

첨부 된 DLL을 사용하려는 경우 GetExecutingAssembly가 아닌 GetAssembly()를 사용해야합니다. – Botis

답변

2

하지 그리고 물론 당신은 추가해야 수표는 내 자신에 그것을 해결할 수 있었다.

코드 :

Assembly assembly = Assembly.LoadFrom("Uranium.exe"); 
Type type = assembly.GetType("Uranium.Util"); 
MethodInfo methodInfo = type.GetMethod("SendClient"); 

methodInfo.Invoke(null, new object[] { Packet.GetData() }); 
0

먼저 해당 유형이 포함 된 어셈블리를 찾아야합니다. 또한 클래스 이름을 GetType()으로, 네임 스페이스가 아니라 GetMethod()으로 전달해야합니다. 클래스 이름이 아닙니다.

foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    Type t = currentassembly.GetType("Util", false, true); 
    if (t != null) 
    { 
     MethodInfo methodInfo = type.GetMethod("SendClient"); 
     methodInfo.Invoke(Activator.CreateInstance(t),new object[] { Packet.GetData()}); 
    } 
} 
+0

그는 이미 클래스가 실행중인 Assemply에 위치해 있다고 명시했습니다. 반복 할 필요가 없습니다. – fredrik

+0

어셈블리에 'Util'클래스가 없습니다. 그러나 그것이 포함됩니다. – Trewqa

0

내가 게시 한 코드에서 알 수 있듯이 우릴륨 클래스의 Util 함수를 호출하려고합니다. 그리고 문자열을 클래스의 인스턴스로 전달합니다.

이 더 당신이 뭘하려는 건지 같아야합니다 SendClient 다음 Activator.CreateInstance(type)null로 대체 할 수 정적 멤버 함수는

Assembly assembly = Assembly.GetExecutingAssembly(); 
Type type = assembly.GetType("Util"); 
MethodInfo methodInfo = type.GetMethod("SendClient"); 

methodInfo.Invoke(Activator.CreateInstance(type), new object[] { Packet.GetData()}); 

합니다. GetTypeGetMethod 반환 값이 null

+0

표시 유형이 null입니다. – Trewqa

+0

클래스가 공개입니까? 개인 수업 인 경우 전혀 보지 못할 수도 있습니다. – fredrik

+0

예, 공개입니다. 네임 스페이스 우라늄 {public class Util {}} – Trewqa