C#, DLL 동적 로드, 반사, 매개 변수, 메서드, 윈도우 호출
C#에서 반사를 사용하려면 먼저 다음 네임스페이스의 클래스 관계를 파악해야 합니다.
System.Reflection 네임스페이스
(1) AppDomain: 응용 프로그램 필드, 프로그램 집합의 논리 용기로 이해할 수 있음
(2) Assembly: 프로그램 세트 클래스
(3) Module: 모듈 클래스
(4) Type: 유형 정보를 반사하는 가장 핵심적인 클래스를 사용
그들 사이는 일종의 종속 관계이다. 즉, 하나의 App Domain은 N 개의 Assembly를 포함할 수 있고, 하나의 Assembly는 N 개의 모듈을 포함할 수 있으며, 하나의 모듈은 N 개의 Type를 포함할 수 있다.
프로그램에서 프로그램 집합을 동적으로 불러오려면 다음과 같은 방법으로 사용할 수 있습니다. 그것은 Load, LoadFrom, LoadFile, LoadWithPartialName 방법입니다.
그중에서 다음과 같은 Assembly를 중점적으로 설명한다.LoadFile 및 Assembly.LoadFrom의 차이점
1、Assembly.LoadFile은 Assembly와 같은 적절한 dll 파일만 로드합니다.LoadFile("abc.dll") 은 abc를 로드합니다.만약 abc.dll에서 def를 인용했습니다.dll면,def.dll은 로드되지 않습니다.
Assembly.LoadFrom은 다르기 때문에 dll 파일과 인용된 다른 dll을 불러옵니다. 예를 들어 위의 예, def.dll도 로드됩니다.
2、Assembly로요.LoadFrom에서 Assembly를 불러올 때, abc와 같은 이름의 Assembly를 불러왔는지 확인합니다.dll에는 두 가지 버전이 있습니다. (버전 1은 디렉터리 1에 있고 버전 2는 디렉터리 2에 있습니다.) 프로그램은 처음에 버전 1을 불러왔습니다. Assembly를 사용할 때."LoadFrom(""2\abc.dll"")은 버전 2를 로드할 때 로드할 수 없으며 버전 1을 반환합니다."Assembly.LoadFile의 경우 이런 검사를 하지 않습니다. 예를 들어 위의 예를 Assembly로 바꾸십시오.LoadFile의 경우 버전 2가 올바르게 로드됩니다.
LoadFile: 지정된 경로에 있는 프로그램 세트 파일의 내용을 로드합니다.LoadFrom: 프로그램 세트의 파일 이름에 따라 프로그램 세트 파일의 내용을 로드합니다.
마지막으로 호출 방법.
Assembly outerAsm = Assembly.LoadFrom(
@"urPath\MyDLL.dll"
);
DLL 클래스 호출 방법
Type type = outerAsm .GetType("MyDLL.MyClass");//호출 유형 MethodInfo method = type.GetMethod("MyVoid");//호출 방법
//전송 매개변수가 필요한 경우
object[] paramertors = new object[] { "3087", "2005"};//매개 변수 집합 object test = method.Invoke(null, paramertors);//Invoke 호출 방법
DLL에서 창 호출
Type outerForm = outerAsm.GetType(
"MyForm"
,
false
);//
(Activator.CreateInstance(outerForm)
as
Form).Show();// ,
전재 대상:https://www.cnblogs.com/mumupudding/p/4607400.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.