> 백엔드 개발 > C++ > Assembly.LoadFile() 이외의 C#에서 DLL의 메서드를 어떻게 동적으로 로드하고 사용할 수 있습니까?

Assembly.LoadFile() 이외의 C#에서 DLL의 메서드를 어떻게 동적으로 로드하고 사용할 수 있습니까?

Susan Sarandon
풀어 주다: 2025-01-14 09:35:43
원래의
261명이 탐색했습니다.

How Can I Dynamically Load and Use Methods from a DLL in C# Beyond Assembly.LoadFile()?

C#에서 동적 DLL 로딩

C#에서 개발자는 특히 타사 라이브러리나 런타임 구성을 사용할 때 동적 링크 라이브러리(DLL)를 동적으로 로드해야 하는 경우가 많습니다. 이 문서에서는 Assembly.LoadFile() 메서드 사용 시 제한 사항에 대해 자주 묻는 질문을 해결하고 리플렉션 및 동적 개체 기반 솔루션을 제공하는 것을 목표로 합니다.

Assembly.LoadFile()의 제한 사항

질문에서 언급했듯이 Assembly.LoadFile()을 사용하면 DLL이 성공적으로 로드되고 클래스 이름과 같은 정보를 검색할 수 있습니다. 그러나 로드된 DLL에서 메서드를 직접 호출하는 것이 불가능할 수도 있습니다.

해결책으로서의 성찰

이러한 한계를 극복하기 위해 개발자는 런타임에 메서드와 작업 개체를 동적으로 호출할 수 있는 리플렉션을 사용할 수 있습니다. 이렇게 하려면:

  1. 클래스의 Type 개체 가져오기: var type = DLL.GetExportedTypes().FirstOrDefault();

  2. 클래스 인스턴스 만들기: var c = Activator.CreateInstance(type);

  3. InvokeMember() 메서드를 사용하여 대상 메서드를 호출합니다.

    <code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>
    로그인 후 복사

.NET 4.0의 동적 개체

.NET 4.0 이상을 대상으로 하는 애플리케이션의 경우 동적 키워드를 사용하면 이 프로세스를 더욱 단순화할 수 있습니다. 이 접근 방식을 사용하면 유형 반영 없이 멤버에 직접 액세스할 수 있습니다.

<code class="language-csharp">dynamic c = Activator.CreateInstance(type);
c.Output("Hello");</code>
로그인 후 복사

결론

요약하자면 Assembly.LoadFile()을 사용하면 DLL 로드가 허용되지만 로드된 모듈에서 메서드를 호출하려면 리플렉션 또는 동적 개체가 필요합니다. 애플리케이션의 요구 사항에 따라 두 방법 모두 C#에서 런타임 시 DLL을 동적으로 로드하고 사용하기 위한 실행 가능한 솔루션을 제공합니다.

위 내용은 Assembly.LoadFile() 이외의 C#에서 DLL의 메서드를 어떻게 동적으로 로드하고 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿