본문 바로가기

자료

GetModuleHandle

728x90

API, C#, GetModuleHandle, LoadLibraryEx, LOAD_LIBRARY_AS_DATAFILE, pinvoke, VB, vb.net, 모듈, 모듈핸들

 

선언:

C#

[DllImport("kernel32")]
public static extern IntPtr GetModuleHandle(String moduleName);

 

VB.NET

<DllImport("kernel32")> _
Public Shared Function GetModuleHandle(moduleName As StringAs IntPtr
End Function

 

 

 

사용 예제:

C#

using System;
using System.Runtime.InteropServices;

namespace ApiReference {
    class ApiExample {
        [DllImport("kernel32")]
        public static extern IntPtr GetModuleHandle(String moduleName);
        
        public static void Main(string[] args) {
        EnterModuleName:
            Console.Write("핸들을 가져올 모듈 이름을 입력하세요: ");
            String moduleName = Console.ReadLine().Trim();
            if ( String.IsNullOrEmpty(moduleName) ) {
                Console.WriteLine("다시 입력하세요");
                goto EnterModuleName;
            }
            
            IntPtr moduleHandle = GetModuleHandle(moduleName);
            if ( moduleHandle == IntPtr.Zero )
                Console.WriteLine("모듈 핸들 가져오기 실패!");
            else
                Console.WriteLine("가져온 모듈 핸들: 0x{0:X8}", moduleHandle.ToInt32());
                
            Console.ReadKey(true);
        }
    }
}

 

VB.NET

Imports System
Imports System.Runtime.InteropServices

Namespace ApiReference
    Class ApiExample
        <DllImport("kernel32")> _
        Public Shared Function GetModuleHandle(moduleName As StringAs IntPtr
        End Function

        Public Shared Sub Main(args As String())
            EnterModuleName:
            Console.Write("핸들을 가져올 모듈 이름을 입력하세요: ")
            Dim moduleName As String = Console.ReadLine().Trim()
            If String.IsNullOrEmpty(moduleName) Then
                Console.WriteLine("다시 입력하세요")
                GoTo EnterModuleName
            End If

            Dim moduleHandle As IntPtr = GetModuleHandle(moduleName)
            If moduleHandle = IntPtr.Zero Then
                Console.WriteLine("모듈 핸들 가져오기 실패!")
            Else
                Console.WriteLine("가져온 모듈 핸들: 0x{0:X8}", moduleHandle.ToInt32())
            End If

            Console.ReadKey(True)
        End Sub
    End Class
End Namespace

 

 

 

예제 실행 결과:

 

 

매개 변수 설명:

moduleName - 불러올 모듈의 이름을 입력합니다.

 

 

 

API 설명:

모듈의 핸들을 가져옵니다.

 

 

 

참고:

GetModuleHandle (MSDN)

 

 

 

비고:

moduleName 매개 변수에는 dll 또는 exe 파일이 올 수 있으며, 확장자가 생략된 경우엔 dll 파일을 검색합니다.

또한, LoadLibraryEx 로 불러온 라이브러리 중 LOAD_LIBRARY_AS_DATAFILE 옵션을 이용해서 불러온 모듈은 검색하지 않습니다.



출처: https://slaner.tistory.com/49 [꿈꾸는 프로그래머]

728x90