>백엔드 개발 >C++ >C#의 런타임에 DLL에서 메서드를 로드하고 호출하려면 어떻게 해야 합니까?

C#의 런타임에 DLL에서 메서드를 로드하고 호출하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-14 10:00:00430검색

How Can I Load and Invoke Methods from DLLs at Runtime in C#?

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#에서는 메서드를 직접 호출하려면 컴파일 타임에 메서드의 존재를 알아야 합니다. 컴파일 타임에 클래스와 메서드를 알 수 없는 경우 다른 접근 방식을 취해야 합니다.

리플렉션을 사용하여 메소드 호출

리플렉션을 사용하면 런타임에 어셈블리를 동적으로 검사하고 조작할 수 있습니다. 리플렉션을 사용하여 메서드를 호출하는 단계는 다음과 같습니다.

  1. 유형 가져오기: GetExportedTypes() 메서드를 사용하여 DLL에서 내보낸 유형 배열을 가져옵니다.
  2. 인스턴스 만들기: Activator.CreateInstance() 메서드를 사용하여 대상 클래스의 인스턴스를 만듭니다.
  3. 호출 메서드: 인스턴스에서 대상 메서드를 호출하려면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.