atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • プログラミング図書館・本館
  • アンマネージドDLLの読み込み

アンマネージドDLLの読み込み

最終更新:2011年01月25日 13:45

atachi

- view
管理者のみ編集可
  • 基本設計 [#pf5c193e]
  • 型変換ルール [#r4ca7b8a]
  • DLLの遅延ロードのサンプルコード [#i2b73562]

基本設計

C++やその他の言語で作成されたDLLは、CLIによる実装ではない(アンマネージドDLL)です。

DllImport属性を使ってインポートするDLLを選ぶ。シグネチャはAPIのリファレンスマニュアルを参考してください。
WindowsAPIで使用されている型とC#での型の対応表は次の項目を参照してください。

[DllImport("user32.dll")]
extern static int GetWindowText(IntPtr hWnd,StringBuilder lpStr,int nMaxCount);

型変換ルール

WindowsAPIの型名 C#および.NETの型名
Windows API C C# プリミティブ .NET Framework
HWND void * → System.IntPtr
WPARAM unsigned int uint System.UInt32
LPARAM long int System.Int32
LRESULT long int System.Int32
HANDLE void * → System.IntPtr
BYTE unsigned char byte System.Byte
SHORT short short System.Int16
WORD unsigned short ushort System.UInt16
INT int int System.Int32
LONG long
UINT unsigned int uint System.UInt32
DWORD unsigned long
ULONG unsigned long
BOOL int bool System.Boolean
CHAR char char System.Char
LPSTR char * → System.Text.StringBuilder
LPWSTR wchar_t *
LPCSTR const char * string System.String
LPCWSTR const wchar_t *
FLOAT float float System.Single
DOUBLE double double System.Double

DLLの遅延ロードのサンプルコード

using System;
using System.Runtime.InteropServices;
 
public class UnManagedDll :IDisposable {
    [DllImport("kernel32")]
    static extern IntPtr LoadLibrary(string lpFileName);
    [DllImport("kernel32")]
    static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
    [DllImport("kernel32")]
    static extern bool FreeLibrary(IntPtr hModule);
 
    IntPtr moduleHandle;
 
    public UnManagedDll(string lpFileName) {
        moduleHandle = LoadLibrary(lpFileName);
    }
 
    public IntPtr ModuleHandle {
        get {
            return moduleHandle;
        }
    }
 
    public T GetProcDelegate<T>(string method) where T :class {
        IntPtr methodHandle = GetProcAddress(moduleHandle, method);
        T r = Marshal.GetDelegateForFunctionPointer(methodHandle, typeof(T)) as T;
        return r;
    }
 
    public void Dispose() {
        FreeLibrary(moduleHandle);
    }
}

次のように呼び出して使用する。

using System;
 
class Program {
    delegate int MessageBoxADelegate(IntPtr hWnd, string lpText, string lpCaption, uint uType);
 
    static void Main(string[] args) {
        using(UnManagedDll user32Dll = new UnManagedDll("user32.dll")) {
            MessageBoxADelegate MessageBoxA =
                user32Dll.GetProcDelegate<MessageBoxADelegate>("MessageBoxA");
 
            MessageBoxA(IntPtr.Zero, "テキスト", "キャプション", 0);
        }
    }
}
「アンマネージドDLLの読み込み」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


プログラミング図書館・本館
記事メニュー

C#

  • 新機能
  • 言語文法
    • 型
    • 関数
    • クラス
    • 演算子
    • 構文
    • デリゲート
    • イベント
    • 例外処理
    • アトリビュート
    • 名前空間
    • ジェネリクス
  • リフレクション
  • LINQ

.NET Frameworks

  • 数値
  • 文字列
  • 日付時刻
  • オブジェクト
  • コレクション
  • ファイルシステム
  • スレッド
  • データテーブル
  • グラフィックス
  • デバッグ
    • ログ出力
    • ユニットテスト
  • ユーティリティ
  • ネットワーク
    • HTTP
  • デバイス
    • COMポート
  • EntityFrameworks
    • Code First Programming Model
  • デバイスドライバ
    • WinUSB

WPF

  • XAML
  • イベント
  • コマンド
  • スタイル
  • データバインディング
  • コンポーネント
  • グラフィックス
  • カスタムコンポーネント
    • 依存関係プロパティ

アプリケーション

  • 二重起動の防止
  • アンマネージドDLLの読み込み
  • 外部のアプリケーションを起動

VisualStudio

  • 拡張機能
  • カラー設定

ライブラリ

  • WPFToolkit
  • A Fast CSV Reader
  • AvalonDock

実装方法

  • ドラッグアンドドロップ
  • アプリケーション内のドラッグアンドドロップ
  • CSVからDataTable

minecraft

  • Bukkit
  • プラグイン
    • Permissions
    • SlowHealth
    • CookieMonster
    • iConomy
    • WorldGuard
    • Lockette
    • MyHome
    • BorderGuard

サイトについて

プロフィール/リンク/未分類

メモ/ゲーム/Stacks/Omoikane


更新履歴

取得中です。

ここを編集

記事メニュー2

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集

人気記事ランキング
  1. VisualStudio/拡張機能
  2. iConomyプラグイン
  3. プロフィール
  4. WPF/コンポーネント/コントロール/コンボボックス
もっと見る
最近更新されたページ
  • 4986日前

    Bukkit
  • 4993日前

    トップページ
  • 5014日前

    メニュー
  • 5024日前

    WPF/グラフィックス
  • 5024日前

    .NET/グラフィックス
  • 5024日前

    .NET/グラフィックス/画像の書き込み
  • 5024日前

    .NET/グラフィックス/画像の読み込み
  • 5030日前

    .NET/コレクション
  • 5048日前

    .NET/WinUSB
  • 5082日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. VisualStudio/拡張機能
  2. iConomyプラグイン
  3. プロフィール
  4. WPF/コンポーネント/コントロール/コンボボックス
もっと見る
最近更新されたページ
  • 4986日前

    Bukkit
  • 4993日前

    トップページ
  • 5014日前

    メニュー
  • 5024日前

    WPF/グラフィックス
  • 5024日前

    .NET/グラフィックス
  • 5024日前

    .NET/グラフィックス/画像の書き込み
  • 5024日前

    .NET/グラフィックス/画像の読み込み
  • 5030日前

    .NET/コレクション
  • 5048日前

    .NET/WinUSB
  • 5082日前

    BorderGuardプラグイン
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. GTA5 MADTOWN(β)まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. SYNDUALITY Echo of Ada 攻略 ウィキ
  6. ドタバタ王子くん攻略サイト
  7. ガンダムGQuuuuuuX 乃木坂46部@wiki
  8. パズル&コンクエスト(Puzzles&Conquest)攻略Wiki
  9. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  10. Idol Showdown(アイドルショーダウン)日本 @ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. MadTown GTA (Beta) まとめウィキ
  6. 発車メロディーwiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 検索してはいけない言葉 @ ウィキ
  9. オレカバトル アプリ版 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  2. 参加者一覧 - ストグラ まとめ @ウィキ
  3. 品川駅 - 発車メロディーwiki
  4. Famos Gray - ストグラ まとめ @ウィキ
  5. 参加者一覧 - MadTown GTA (Beta) まとめウィキ
  6. 発車メロディー変更履歴 - 発車メロディーwiki
  7. Lycoris - MadTown GTA (Beta) まとめウィキ
  8. オーバーモード/マスターモード(仮面ライダーガヴ) - アニヲタWiki(仮)
  9. FadeGate - ストグラ まとめ @ウィキ
  10. ぶんぶんギャング - MadTown GTA (Beta) まとめウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.