C# DLL 만들기

C#/기능 활용 2015. 11. 14. 00:00
728x90

DLL 이 외부로 공개할 수 있는 것은 클래스, 구조체, 열거형, 인터페이스 같은 타입인데 주로 클래스를 공개한다.


DLL 을 만들기 위한 절차

1. 비주얼 스튜디오 실행시킨 후 파일 - 새로 만들기 - 프로젝트를 실행한다.

클래스 라이브러리를 선택하고 파일 이름을 Link2Me 로 생성했다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Link2Me
{
    public class Class1
    {
    }
}

로 기본 파일이 생성된다.


2. 만들고자 하는 코드를 작성한다.

using System;
using System.IO;
using System.Net;

namespace Link2Me
{
    public class Logic
    {
        /// <summary>
        /// 문자열 원본에서 오른쪽에서 부터 추출한 갯수만큼 문자열을 가져옵니다.
        /// </summary>
        /// <param name="Text">문자열 원본</param>
        /// <param name="nLength">추출할 갯수</param>
        /// <returns>추출된 문자열</returns>
        public string RIGHT(string Text, int nLength)
        {
            string ConvertText = string.Empty;
            if (Text.Length < nLength)
            {
                nLength = Text.Length;
            }
            ConvertText = Text.Substring(Text.Length - nLength, nLength);
            return ConvertText;
        }

        /// 문자열 원본에서 왼쪽에서 부터 추출한 갯수만큼 문자열을 가져옵니다.
        /// </summary>
        /// <param name="Text">문자열 원본</param>
        /// <param name="nLength">추출할 갯수</param>
        /// <returns>추출된 문자열</returns>
        public string LEFT(string Text, int nLength)
        {
            string ConvertText = string.Empty;
            if (Text.Length < nLength)
            {
                nLength = Text.Length;
            }
            ConvertText = Text.Substring(0, nLength);
            return ConvertText;
        }

        /// <summary>
        /// 문자열 원본의 지정한 위치에서 부터 추출할 갯수 만큼 문자열을 가져옵니다.
        /// </summary>
        /// <param name="Text">문자열 원본</param>
        /// <param name="nStart">추출을 시작할 위치, 0부터 시작</param>
        /// <param name="nLength">추출된 문자열</param>
        /// <returns>추출된 문자열</returns>
        public string Mid(string Text, int nStart, int nLength)
        {
            string ConvertText;
            if (nStart < Text.Length)
            {
                if ((nStart + nLength) <= Text.Length)
                {
                    ConvertText = Text.Substring(nStart, nLength);
                }
                else
                {
                    ConvertText = Text.Substring(nStart);
                }
                return ConvertText;
            }
            else
            {
                Text = string.Empty;  // 시작점이 길이보다 길면 반환할 것이 없음
                return Text;
            }
        }

        /// <summary>
        /// 문자열이 숫자인지 검사하여 숫자이면 true 를 반환
        /// </summary>
        public bool isNumeric(string str)
        {
            double Num;
            bool isNum = double.TryParse(str, out Num);
            if (isNum)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 원하는 문자열을 잘라내는 함수입니다
        /// </summary>
        /// <param name="_body">원본 문자열</param>
        /// <param name="_parseString">Split할 구분자</param>
        /// <param name="index">Split으로 잘라진 배열의 숫자</param>
        public static string SSplit(string _body, string _parseString, int index)
        {
            // 엑셀 VBA 에서 사용하는 Split 함수
            string varTemp = _body.Split(new string[] { _parseString }, StringSplitOptions.None)[index];
            return varTemp;
        }

        /// <summary>
        /// 문자열에 한글이 포함되어 있는지 검사하여 포함되어 있으면 true 반환
        /// </summary>
        public bool isContainHangul(string s)
        {
            char[] charArr = s.ToCharArray();
            foreach (char c in charArr)
            {
                if (char.GetUnicodeCategory(c) == System.Globalization.UnicodeCategory.OtherLetter)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Public IP 주소를 문자열로 반환
        /// </summary>
        public static string GetRealIP()
        {
            string url = "http://www.findip.kr/";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";

            string resResult = string.Empty;
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                StreamReader readerPost = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8, true);
                resResult = readerPost.ReadToEnd();
            }

            if (resResult.IndexOf("내 아이피 주소(My IP Address) :") > 0)
            {
                int ingNO = resResult.IndexOf("내 아이피 주소(My IP Address) :");
                string varTemp = resResult.Substring(ingNO, 50);              
                string realip = SSplit(SSplit(varTemp, "내 아이피 주소(My IP Address) :", 1), "</h1>", 0).Trim();
                return realip;
            }
            return null;
        }
    }
}


3. 순수한 응용 프로그램 코드만 만드는 것이므로 Release 모드로 실행한다.

   



4. DLL 을 프로젝트 파일에 참조시키기








5. DLL 실행시키기

MessageBox.Show(Link2Me.Logic.GetRealIP());

로 테스트를 해봤다.

정상적으로 IP 정보를 잘 보여준다.

using Link2Me;

를 선언해서 사용해도 된다.


블로그 이미지

Link2Me

,