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 중국어 웹사이트의 기타 관련 기사를 참조하세요!