2013-10-05 2 views
1

가정하자 나는이 다음과 같은 코드를 가진 ILASM 라이브러리 :호출 ILASM 전역 함수

.assembly extern mscorlib{} 
.assembly TestMe{} 
.module TestMe.dll 
.method public static void PrintMe() cil managed 
{ 
    ldstr "I'm alive!" 
    call void [mscorlib]System.Console::WriteLine(string) 
    ret 
} 

가 어떻게이 C# 코드에서 글로벌 PrintMe() 함수를 호출 할 수 있습니다?

+0

그냥이 코드에서 빌드 된 어셈블리에 대한 참조를 추가합니다. 이제는 C#에서 익숙한 모든 기능을 사용할 수 있습니다. –

+0

.dll에 대한 참조 만 추가하면 내 .cs 코드에 PrintMe() 함수가 표시되지 않습니다. – user2341923

+0

아직 유효한 IL을 작성하지 않았으므로 ildasm.exe를 사용하여 IL의 모양을 확인하십시오. 메소드는 클래스의 일부 여야합니다. –

답변

2

당신이 할 수있는 ...하지만 어떤 정말 유용한 방법 :

var module = Assembly.LoadFile("path_to_dll.dll").GetModules()[0]; 
// the first and only module in your assembly 
var method = module.GetMethod("PrintMe"); 

method.Invoke(null, 
       BindingFlags.Public | BindingFlags.Static, 
       null, 
       null, 
       CultureInfo.CurrentCulture); // Prints "I'm alive!" to console. 
1

나는 알고 있습니다. C#은 최상위 수준이 아닌 형식으로 선언 된 메서드에 대해서만 "인식"합니다. 메소드를 유형으로 이동하십시오. 반사를 통해