본문 바로가기
개발언어/.NET

C# 클래스 라이브러리 생성 및 활용

by 공장장코난 2018. 12. 27.


최근 프로젝트에 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