동일한 솔루션과 네임 스페이스에 winform 응용 프로그램과 서비스 DLL (C#)이 있습니다. DLL을 동적으로로드하므로 향후 DLL을 업데이트 할 수 있습니다. 기본 폼은 동적으로로드 된 DLL에서 메서드를 호출하고 자체 (this
)를 변수로 전달합니다. 기본 폼에동적으로로드 된 DLL에서 호출 된 메서드에서 호출 양식을 참조하는 방법
코드 : DLL에서
namespace MyNamespace
{
class Form1
{
int i = 5;
// Code
.....
private void CallDllMethod()
{
try
{
Assembly assembly = Assembly.LoadFrom("DllName.dll");
Type type = assembly.GetType("MyNamespace.Class2");
object ClassObj = Activator.CreateInstance(type);
type.InvokeMember("DoSomething",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
ClassObj,
new object[] { this });
}
catch (Exception){...}
}
}
}
코드 : 그것은 나에게 말한다
namespace MyNamespace
{
public class Class2
{
public void DoSomething(Form1 obj)
{
...
}
}
}
이 Form1 obj
을 모르는 나는 내가 이유를 이해 생각.
dll이 기본 양식을 "알기"때문에 구성원 및 방법과 상호 작용할 수 있도록하려면 어떻게해야합니까 ?? 이 목표를 달성하기위한 더 좋은 방법이 있습니까?
감사합니다 당신에게
내가 제안한대로 결국 프로젝트의 exe를 참조하고 작동합니다. 호기심 때문에 처음에는 리플렉션 (exe를 참조하기 전에)을 사용하고 main.format에서'type.GetMethod ("funcName")을 사용하여 public 메소드를 호출했습니다.); ',하지만 공공의 구성원과 그들의 내부 가치에 접근 할 수있는 방법을 찾지 못했습니다. 방법이 있습니까? – Yoram
적절한 버전의'Type.GetMember','Type.GetField','Type.GetConstructor' 등을 사용하여 속성, 필드 및 메서드에 액세스 할 수 있습니다. 또한 public이 아닌 메서드를 가져올 수 있습니다.) 당신이 원하는 가시성 수준을 나타내는'BindingFlags'를 전달함으로써. –
고마워, 나는 그것을 시도 할 것이다. – Yoram