C# 런타임 중 DLL 메서드를 동적으로 로드하고 호출하는 방법에 대한 자세한 설명
C# 애플리케이션 개발에서는 기능 확장을 위해 외부 라이브러리(.DLL)를 동적으로 로드해야 하는 경우가 많습니다. 이 문서에서는 런타임에 DLL을 로드하는 단계를 자세히 설명하고 로드 후 직접 메서드를 호출할 수 없는 일반적인 문제를 해결합니다.
Assembly.LoadFile()을 사용하여 DLL 로드
Assembly.LoadFile()
메서드는 DLL을 애플리케이션 메모리에 로드하여 DLL에 정의된 형식과 메서드에 액세스하는 데 사용됩니다. 예:
<code class="language-csharp">var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");</code>
이 예에서는 DLL 파일이 메모리에 로드되고 'DLL'이라는 변수에 할당됩니다.
LoadFile()에서 메소드 호출까지
DLL을 로드한 후 다음 단계는 대상 클래스의 인스턴스를 만들고 해당 메서드를 호출하는 것입니다. C#에서는 메서드를 직접 호출하려면 컴파일 타임에 메서드의 존재를 알아야 합니다. 컴파일 타임에 클래스와 메서드를 알 수 없는 경우 다른 접근 방식을 취해야 합니다.
리플렉션을 사용하여 메소드 호출
리플렉션을 사용하면 런타임에 어셈블리를 동적으로 검사하고 조작할 수 있습니다. 리플렉션을 사용하여 메서드를 호출하는 단계는 다음과 같습니다.
GetExportedTypes()
메서드를 사용하여 DLL에서 내보낸 유형 배열을 가져옵니다. Activator.CreateInstance()
메서드를 사용하여 대상 클래스의 인스턴스를 만듭니다. InvokeMember()
메서드를 사용합니다. <code class="language-csharp">foreach(Type type in DLL.GetExportedTypes()) { var c = Activator.CreateInstance(type); type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] {@"Hello"}); }</code>
동적 개체를 사용하여 메서드 호출(.NET 4.0 이상만 해당)
.NET 4.0 이상에서는 동적 개체를 사용하여 인스턴스의 메서드를 동적으로 호출하여 위 프로세스를 단순화할 수 있습니다.
<code class="language-csharp">foreach(Type type in DLL.GetExportedTypes()) { dynamic c = Activator.CreateInstance(type); c.Output(@"Hello"); }</code>
위 메서드 중 하나를 사용하면 런타임에 로드된 DLL의 메서드를 성공적으로 호출하고 C# 애플리케이션의 기능을 확장할 수 있습니다.
위 내용은 C#의 런타임에 DLL에서 메서드를 로드하고 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!