> 백엔드 개발 > C++ > C# 콘솔 응용 프로그램에서 동적으로 로드된 DLL 내의 메서드에 어떻게 액세스할 수 있습니까?

C# 콘솔 응용 프로그램에서 동적으로 로드된 DLL 내의 메서드에 어떻게 액세스할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-14 10:44:51
원래의
548명이 탐색했습니다.

How Can I Access Methods Within a Dynamically Loaded DLL in a C# Console Application?

C#에서 DLL 동적 로딩

C#을 사용하면 런타임에 DLL을 동적으로 로드하고 사용할 수 있습니다. Assembly.LoadFile() 메서드를 사용하면 DLL을 애플리케이션에 로드할 수 있습니다.

문제: 콘솔 애플리케이션에서 로드된 DLL의 메서드를 사용할 수 없습니다

사용자들은 DLL을 로드할 수 있지만 해당 메서드에 액세스할 수 없다고 보고했습니다. 이는 C# 컴파일러가 DLL의 형식과 멤버를 미리 확인할 수 없기 때문입니다. DLL에서 메서드를 호출하려면 리플렉션 또는 동적 개체를 사용해야 합니다.

해결책 1: 반사 사용

리플렉션을 사용하면 유형 메타데이터를 얻고 런타임에 해당 멤버를 호출할 수 있습니다. 리플렉션을 사용하려면 메서드를 명시적으로 호출해야 합니다.

<code class="language-csharp">// 加载 DLL
var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");

// 遍历 DLL 中导出的类型
foreach (Type type in assembly.GetExportedTypes())
{
    // 创建类型实例
    var instance = Activator.CreateInstance(type);

    // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数)
    type.InvokeMember("Output", BindingFlags.InvokeMethod, null, instance, new object[] { "Hello" });
}</code>
로그인 후 복사

해결책 2: 동적 개체 사용(.NET 4.0 이상)

동적 개체를 사용하면 명시적인 유형 변환 없이 더 간단한 구문을 사용하여 코드에서 DLL 메서드를 호출할 수 있습니다.

<code class="language-csharp">// 加载 DLL
var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll");

// 遍历 DLL 中导出的类型
foreach (Type type in assembly.GetExportedTypes())
{
    // 创建动态实例
    dynamic instance = Activator.CreateInstance(type);

    // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数)
    instance.Output("Hello");
}</code>
로그인 후 복사

두 솔루션 모두 DLL의 메서드에 동적으로 액세스하는 방법을 보여줍니다. 선택하는 방법은 .NET 버전과 개인 취향에 따라 다릅니다. 리플렉션은 더 정밀한 제어를 제공하고 동적 개체는 코드를 단순화합니다. @"C:visual studio 2012ProjectsConsoleApplication1ConsoleApplication1DLL.dll"은 DLL의 실제 경로로 바꿔야 합니다.

위 내용은 C# 콘솔 응용 프로그램에서 동적으로 로드된 DLL 내의 메서드에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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