메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

C#에서 재사용하기 위한 Visual Basic code 재사용 방법

한빛미디어

|

2008-03-31

|

by HANBIT

19,123

제공 : 한빛 네트워크
저자 : 임영규

Visual Basic에서 C#으로 Migration

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

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

Visual Basic의 Class 생성

Visual Basic에서 사용할 Class를 생성하고자 한다면 먼저 다음 형태의 Class 생성자와 소멸자를 만드는 일이다.
( 생성자 ) 
Private sub class_initialize()
End sub
( 소멸자 )
Private sub class_terminate()
End sub
이들은 각각 하나의 응용 프로그램에서 재사용되는 개체로 정의되고 파괴되는 역할을 한다. 생성자는 Class에서 사용할 변수들의 초기 값을 지정하는데 사용된다. 소멸자는 생성한 Class를 소멸하는데 사용되며 기본적으로 다음과 같다.
Set mycls = nothing
Mycls는 Class명이며, Visual Basic 편집기의 Class 속성창의 이름과 같다. 기존에 사용하던 Visual Basic 코드를 재사용하고자 한다면 위의 방법을 이용하고 dll을 생성하여야 한다.

Visual Basic Property

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

이러한 전제를 배경으로 Property 변수는 private 접근 제한을 가진 반면 Property명은 외부, 즉 C#에 공개 되어야 하기 때문에 public 접근 제한을 가진다.
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
C#에서는 "OutVal"을 통하여 접근을 한다.

예제

여기에 실제 예제로 사용된 Visual Basic code를 제공한다. Visual Basic 변수의 값을 읽어 와서 출력하고, 기존 값에 10을 더하여 Visual Basic 변수에 저장을 한 다음 C#에서 다시 읽어 출력하는 예제이다.
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
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());
  }
 }
}
Convert Visual Basic dll to .Net dll

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


[그림 1] dll 변환


[그림 2] 참조추가


[그림 3] COM 삽입


[그림 4] www.sharpdevelop.net

결론

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

단지 .Net이 추구하는 것과 같이 다양한 프로그래밍 언어로 개발한 응용 프로그램을 Type 공유를 통하여 재사용하는 개념에 적응해 가고 개발 기간을 절약하는 것이 남은 숙제라고 생각한다. 아울러 소개한 SharpDevelop 개발 툴과 같이 C#, VB.Net을 개발 할 수 있는 훌륭한 OpenSource에 대하여 감사를 표하고 싶다.
TAG :
댓글 입력
자료실