티스토리 뷰

목차

    반응형

    비주얼 베이직 코드 재사용 방법, C# 마이그레이션과 Class 생성 등



    Visual Basic에서 C#으로 Migration 


    이를 원하는 많은 사람은 2가지 큰 문제점을 만나야 한다. 우선은 C#이라는 장애물은 만나야 하고 나아가 .Net이라는 더 큰 장애물을 지나야 한다. 다음으로 기존에 작성한 다양한 Visual Basic code를 어떻게 재사용해야 할지에 대하여 충분한 고민을 하여야 한다. 그나마 Visual Basic code가 ActiveX dll이면 다행일 것이다.


    본 기사에서는 이러한 문제점을 극복할 방법에 대하여 기술하고자 한다. 먼저 Visual Basic에서의 Class 생성에 대하여 기술하고 다음으로 Property에 대하여 논한다. 그리고 C#에서 사용할 수 있는 dll로 형태를 변형하는 방법에 대하여 논하며 마지막으로 #에서 이를 이용하는 방법에 대하여 기술한다. 

    Visual Basic의 Class 생성 


    Visual Basic에서 사용할 Class를 생성하고자 한다면 먼저 다음 형태의 Class 생성자와 소멸자를 만드는 일이다.


    1
    2
    3
    4
    5
    6
    7
    ( 생성자 ) 
    Private sub class_initialize()
    End sub
     
    ( 소멸자 )
    Private sub class_terminate()
    End sub
    cs


    이들은 각각 하나의 응용 프로그램에서 재사용되는 개체로 정의되고 파괴되는 역할을 한다.


    생성자는 Class에서 사용할 변수들의 초기 값을 지정하는 데 사용된다. 소멸자는 생성한 Class를 소멸하는 데 사용되며 기본적으로 다음과 같다.


    1
    Set mycls = nothing
    cs


    Mycls는 Class명이며, Visual Basic 편집기의 Class 속성창의 이름과 같다. 기존에 사용하던 Visual Basic 코드를 재사용하고자 한다면 위의 방법을 이용하고 dll을 생성하여야 한다. 


    Visual Basic Property


    Property는 하나의 Class 내에서 선언된 변수 중 은닉(외부 노출 금지)을 목적으로 선언된 변수에 대하여 값을 대입하고 이 변수의 값을 복사해 갈 수 있는 통로를 만드는 일이다. 본 기사에서는 생성한 dll이 같은 Project내에서 사용되는 Class가 아님을 전제로 하였기 때문에 이 변수는, 엄밀히 말하면 Property명은 외부 C# 프로그램에서 사용하기에 쉬운 이름을 제공하여야 한다. 


    이러한 전제를 배경으로 Property 변수는 private 접근 제한을 가졌지만 Property명은 외부, 즉 C#에 공개되어야 하므로 public 접근 제한한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private inhere as integer
    (값의 대입) – inhere에 C#에서 제공하는 데이터를 입력함
    Public property Let InVal(byval Ias integer)
    Inhere = I
    End property
    (값의 인출) – inhere의 값의 C#에 제공 함
    Public property Get OutVal()
    OutVal=Inhere
    End property
    cs


    C#에서는 "OutVal"을 통하여 접근한다. 


    예제 


    여기에 실제 예제로 사용된 Visual Basic code를 제공한다. Visual Basic 변수의 값을 읽어 와서 출력하고, 기존 값에 10을 더하여 Visual Basic 변수에 저장한 다음 C#에서 다시 읽어 출력하는 예제이다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    VB예제
    Private x As Integer
    Public Function Show() As Integer
       MsgBox ("Here is VB6 Function for public, You are calling me")
        Show = 0
    End Function
    Private Sub class_initialize()
        x = 10
    End Sub
    Public Property Let XPos(ByVal mX As Integer)
        x = mX
    End Property
    '
    Public Property Get XPos() As Integer
        XPos = x
    End Property
    Private Sub Class_terminate()
        '
    End Sub
    cs


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    C#예제
    /-
     * Created by SharpDevelop.
     * User: Lim.Y.K
     * Date: 2008-03-26
     * Time: ?? 5:38
     * 
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     *-
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using VB6Dllproperty;
    namespace dllvb6
    {
     /// 
     /// Description of MainForm.
     /// 
     public partial class MainForm : Form
     {
      public MainForm()
      {
       //
       // The InitializeComponent() call is required for Windows Forms designer support.
       //
       InitializeComponent();
       
       //
       // TODO: Add constructor code after the InitializeComponent() call.
       //
       short y=20;
       // VB dll을 생성한다
       DllMain c = new DllMain();
       c.Show();
       // 10 출력
       y=short.Parse((c.GetType().GetProperty("XPos").GetValue(c, null).ToString()));
       // 처음 값
       MessageBox.Show(y.ToString());  
       y +=10;
       c.GetType().GetProperty("XPos").SetValue(c, y, null);
        // 10 더하고, 20출력
       MessageBox.Show(y.ToString());
      }
     }
    }
    cs

    Convert Visual Basic dll to .Net dll 


    dll 변환을 위해서는 .NET SDK를 설치해야 하고 아울러 Sharpdevelop을 이용하기 위해서는 .NET Framework 2.0을 설치해야 한다. 


    vb6dll 변환[비주얼베이직에서 C# 마이그레이션] vb6dll 변환


    참조추가[비주얼베이직에서 C# 마이그레이션] 참조추가


    COM 삽입[비주얼베이직에서 C# 마이그레이션] COM 삽입


    www.sharpdevelop.net[비주얼베이직에서 C# 마이그레이션] www.sharpdevelop.net


    결론


    이상에서와같이 간편한 방법으로 Visual Basic Class를 C#에서 사용할 수 있는 방법론에 대하여 알아보았다. 새로운 프로그램을 작성하는 것도 좋은 방법이지만 OpenSource를 이용하고 재배포 가능한 범위 내에서 이를 재가공하여 사용하는 방법도 좋은 방법일 것이다. 프로그래밍 언어마다 저마다의 특징을 가지고 있고 쓰임도 정해져 있다고 보지는 않는다.


    상대적으로 하드웨어가 발전했기 때문에 어떤 프로그래밍 언어를 사용하느냐는 중요하지 않다고 생각한다. 단지 .Net이 추구하는 것과 같이 다양한 프로그래밍 언어로 개발한 응용 프로그램을 Type 공유를 통하여 재사용하는 개념에 적응해 가고 개발 기간을 절약하는 것이 남은 숙제라고 생각한다.


    아울러 소개한 SharpDevelop 개발 툴과 같이 #, VB.Net을 개발할 수 있는 훌륭한 OpenSource에 대하여 감사를 표하고 싶다.


    비주얼 베이직 코드 재사용 방법, C# 마이그레이션과 Class 생성 등

    반응형