C#でDLLの関数を簡単に呼び出せるクラス

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

C#でDLLの関数を簡単に呼び出せるクラス

投稿記事 by naohiro19 » 8年前

載せてみました。

CODE:

using System;
using System.Security;
using System.Runtime.InteropServices;

namespace Win32APIClass
{
    public class DllModule
    {

        #region ModuleLoadings Enums

        /// 
        /// LoadLibraryExの第3引数を渡すフラグを表します。
        /// 
        [Flags]
        public enum ModuleLoading : uint
        {
            Dont_Resolve_Dll_References = 0x00000001,
            DataFile = 0x00000002,
            Altered_Search_Path = 0x00000008,
            Ignore_Code_Authz_Level = 0x00000010,
            Image_Resource = 0x00000020,
            DataFile_Exclusive = 0x00000080,
            Search_Dll_Load_Dir = 0x00000100,
            Search_Application_Dir = 0x00000200,
            Search_User_Dirs = 0x00000400,
            Search_System32 = 0x00000800,
            Search_Default_Dirs = 0x00001000,
        }
        #endregion

        #region DisableThreadLibraryCalls

        /// 
        /// hLibModule で指定されたダイナミックリンクライブラリ(DLL)の通知 DLL_THREAD_ATTACH と DLL_THREAD_DETACH を
        /// 無効にします。これにより、アプリケーションのワーキングコードセットのサイズを減らすことができます。
        /// 
        /// 通知 DLL_THREAD_ATTACH と DLL_THREAD_DETACH を無効にする、ダイナミックリンクライブラリのモジュールを指定します。
        /// 
        /// 関数が成功すると 0 以外の値が返ります。
        /// 関数が失敗すると 0 が返ります。
        /// hLibModule パラメータで指定された DLL で静的なスレッドローカル記憶域がアクティブになっている場合、
        /// または、hLibModule パラメータに無効なモジュールハンドルが指定されている場合は、DisableThreadLibraryCalls 関数が失敗します。
        /// 拡張エラー情報を取得するには、 関数を使います。
        /// 
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Kernel32.dll", SetLastError = true)]
        public static extern bool DisableThreadLibraryCalls(IntPtr hLibModule);

        #endregion

        #region LoadLibrary

        /// 
        /// 指定された実行可能モジュールを、呼び出し側プロセスのアドレス空間内にマップします。
        /// 
        /// モジュールのファイル名
        /// 
        /// 関数が成功すると、モジュールのハンドルが返ります。
        /// 関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、 関数を使います。
        /// 
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Kernel32.dll ", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPTStr)] string lpLibName);

        #endregion

        #region LoadLibraryEx

        /// 
        /// 指定された実行可能モジュールを、呼び出し側プロセスのアドレス空間にマップします。
        /// 
        /// Windows の実行可能モジュール(.DLL ファイルまたは .EXE ファイル)を示す NULL で終わる文字列へのポインタを指定
        /// このパラメータは将来使うために予約されています。
        /// モジュールをロードするときのアクションを指定します。
        /// 関数が成功すると、マップされた実行可能モジュールのハンドルが返ります。
        /// 関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、 関数を使います。
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPTStr)] string lpLibName, [Optional]IntPtr hFile, ModuleLoading dwFlags);

        #endregion

        #region GetProcAddress

        /// 
        /// ダイナミックリンクライブラリ(DLL)が持つ、指定されたエクスポート済み関数のアドレスを取得します。
        /// 
        /// DLL モジュールのハンドル
        /// 関数名
        /// 
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Kernel32.dll", SetLastError = true,)]
        public static extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPTStr)]string lpProcName);

        #endregion

        #region GetModuleHandle
        /// 
        /// 呼び出し側プロセスのアドレス空間に該当ファイルがマップされている場合、指定されたモジュール名のモジュールハンドルを返します。
        /// 
        /// モジュール名
        /// 
        /// 関数が成功すると、指定したモジュールのハンドルが返ります。
        /// 関数が失敗すると、NULL が返ります。拡張エラー情報を取得するには、 関数を使います。
        /// 
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Kernel32.dll", SetLastError = true)]
        public static extern IntPtr GetModuleHandle([MarshalAs(UnmanagedType.LPTStr]string lpModuleName);

        #endregion
        
        #region FreeLibrary
        /// 
        /// ロード済みのダイナミックリンクライブラリ(DLL)モジュールの参照カウントを 1 つ減らします。
        /// 参照カウントが 0 になると、モジュールは呼び出し側プロセスのアドレス空間からマップ解除され、
        /// そのモジュールのハンドルは無効になります。
        /// 
        /// DLL モジュールのハンドル
        /// 
        /// 関数が成功すると、0 以外の値が返ります。
        /// 関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
        /// 
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Kernel32.dll", SetLastError = true)]
        public static extern bool FreeLibrary(IntPtr hModule);

        #endregion
        
    }
}

コメントはまだありません。