상세 컨텐츠

본문 제목

Windows API

.NET/Windows API for .NET

by 클리엘 클리엘 2019. 8. 12. 11:31

본문

1. API

API는 Application Programming Interface의 약자로 Software개발시에 특정기능을 구현하려고 처음부터 새로 Program을 작성하는 것이 아니라 다른 Library에 의해 이미 구현되어 있는 기능을 개발하고자 하는 Software에 손쉽게 추가할 수 있는 것을 말합니다.

예를 들어 영어사전이나 국어사전 Program을 구현하고자 하는 경우 Naver나 Google등에서 제공하는 API를 끌어다 쓰면 단 몇줄 만으로도 훌륭한 사전 Program을 개발할 수 있게 되는 것입니다.

여기서 Windows API는 System에 대한 각종 정보를 알아내거나 운영체제(OS : 여기서는 Windows)의 특정 기능을 Program안에서 구현하고자 할때마다 편리하고도 간단하게 작업할 수 있는 OS Library입니다.

2. API 구현을 위한 Windows Library종류및 역활

 Library 파일  역활
 Advapi32.dll  Registry및 보안 관련
 Comdlg32.dll  대화상자 관련
 Gdi32.dll  GDI및 Graphic 관련
 Kernel32.dll  Windows Kernel 관련
 Shell32.dll  명령어 해석 관련
 User32.dll  사용자 Interface 관련
 Lz32.dll  압축 관련
 Netapi32.dll  Network 관련
 Winmm.dll  Multimedia 관련
 Winspool.drv  Print spoller 관련


위 File명에서 뒤의 32는 32bit를 의미합니다. 윈도우 3.1이하에서는 16bit였다가 95부터 32bit로 바뀌기 시작해 File명뒤에 32라는 숫자가 붙게 된것입니다.

3. API 선언및 사용

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer, ByVal X3 As Integer, ByVal Y3 As Integer) As Integer

<DllImport("user32.dll")> _
Friend Shared Function GetKeyState(ByVal keyCode As Integer) As Short
End Function

Private Declare Sub ReleaseCapture Lib "user32" ()

▶VB.NET 선언

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern int CreateRoundRectRgn(int X1, int Y1, int X2, int Y2, int X3, int Y3);

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern void ReleaseCapture();

▶C# 선언


VB.net과 C#에서 gid32와 user32 Library를 통해 CreateRoundRectRgn및 ReleaseCapture함수를 호출하고 있습니다. 이때 API선언부분에서 Function(VB.net)과 int(C#)은 해당 함수가 수행되고 난 후 특정값을 반환하다는 것을 의미하고 있으며 반면 Sub(VB.net)와 void(C#)은 반환하는 값이 없음을 의미합니다.

보시는 바와 같이 VB.NET에서나 C#에서나 Import를 쓰게 되면 호출하는 방식은 거의 비슷합니다. 하지만 명확한 구분을 위해서 나중에 API함수를 설명할때는 VB.NET부분에 Lib 형식으로 호출하는 방법을 기술할 것입니다.

예제에서 처럼 API함수를 정의한 후 해당 API의 함수 수행을 위해 각각의 Library File(예제에서는 gid32.dll 및 user32.dll)을 찾아야 하는데 이때 File을 찾는 순서는 다음과 같습니다.

(1) 현재 program이 실행중인 Folder에서 찾는다.
(2) C:\Windows\System32 Folder에서 찾는다.
(3) C:\Windows\System Folder에서 찾는다.
(4) C:\Windows Folder에서 찾는다.

만일 File이 특정위치에 있다는것을 알리려면 다음처럼 경로명까지 포함하여 선언하면 됩니다.

Private Declare Function CreateRoundRectRgn Lib "C:\Windows\System32\gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer, ByVal X3 As Integer, ByVal Y3 As Integer) As Integer

▶VB.NET

[System.Runtime.InteropServices.DllImport(@"C:\Windows\System32\gdi32.dll")]
private static extern int CreateRoundRectRgn(int X1, int Y1, int X2, int Y2, int X3, int Y3);

▶C#

태그

관련글 더보기

댓글 영역