최근 프로젝트에 C# 클래스 라이브러리 생성할 일이 생겼다. 예전에 만들어서 활용했지만 오랜만에 손대니 기억이 가물가물하다.
이참에 관련 내용을 정리해 둔다.
STEP1) 프로젝트 생성
-VisualStudio에서 클래스 라이브러리(.NET Framework) 를 생성
STEP2)Class 라이브러리 생성
-처음 생성하면 기본 Class1.cs 파일이 존재한다. 해당 파일을 원하는 Module명으로 변경 하자.
-내경우엔 테스트로 사칙 연산을 위한 CalcModule.cs로 변경함.
STEP3) Class 라이브러리 구현
-구현완료 후 성공적으로 빌드를 완료하면 프로젝트명으로 입력된 TestMoudleLib.dll 파일이 생성된다.
...
namespace TestModuleLib
{
public class CalcModule
{
//클래스 라이브러리 생성자
public CalcModule()
{
}
//덧셈 연산
public int Add(int inValue1, int inValue2)
{
return inValue1 + inValue2;
}
//뺄셈 연산
public int Sub(int inValue1, int inValue2)
{
return inValue1 - inValue2;
}
//곱셈 연산
public int Mul(int inValue1, int inValue2)
{
return inValue1 * inValue2;
}
//나눗셈 연산
public int Div(int inValue1, int inValue2)
{
return inValue1 / inValue2;
}
}
}
STEP4) Class 라이브러리 활용
-빌드된 TestModuleLib.dll 파일을 참조 추가
//클래스 라이브러리 변수 선언
TestModuleLib.CalcModule calcModule = new TestModuleLib.CalcModule();
//사용시 명수명에 '.'를 입력하면 작성된 Add, Sub, Mul, Div functions이 모두 노출되고, 사용할 수 있다.
...
int value1 = 15;
int value2 = 5;
int result = calcModule.Add(value1, value2);
*동적으로 클래스 라이브러리 호출
using System.Reflection; //참조추가
...
var objTestModule = Assembly.LoadFile("dll 파일 경로"); //반드시 full 경로를 입력해야함.
var objLibType = objTestModule.GetType("TestModuleLib.CalcModule");
var objLibInst = Activator.CreateInstance(objLibType);
var objMethod = objLibtype.GetMethod("Add");
var returnValue = objMethod.Invoke(objLibInst, new object[] { int.Parse(this.tbxValue1.Text), int.Parse(this.tbxValue2.Text));
*동적으로 클래스 라이브러리 Method 호출시 out parameter 값 가져오기
Add function을 아래와 같이 변경
public void Add(int inValue1, int inValue2, out int outResult)
{
outResult = 0;
outResult = intValue1 + intValue2;
}
var objTestModule = Assembly.LoadFile("dll 파일 경로");
var objLibType = objTestModule.GetType("TestModuleLib.CalcModule");
var objLibInst = Activator.CreateInstance(objLibType);
var objMethod = objLibtype.GetMethod("Add");
object[] parameters = new object[] { value1, value2, null };
objMethod.Invoke(objLibInst, parameters);
int result = (int)parameters[2];
참조
https://docs.microsoft.com/ko-kr/dotnet/core/tutorials/library-with-visual-studio
https://stackoverflow.com/questions/569249/methodinfo-invoke-with-out-parameter
'개발언어 > .NET' 카테고리의 다른 글
C# Process 검색 (0) | 2019.01.08 |
---|---|
C# delegate 사용법 - 사례1 (0) | 2019.01.05 |
C# byte 초기화 및 copy (0) | 2018.12.27 |
yyyyMMdd 타입의 string date를 DateTime format으로 변환 (0) | 2018.12.26 |
WebView Control Navigate 실행시 localhost / intranet 실행 오류 (0) | 2018.11.29 |