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. WPF/コンポーネント/コントロール/テキストボックス/バリデーション
  2. VisualStudio/拡張機能
  3. WPF/コンポーネント/コントロール/データグリッド
  4. .NET/ユニットテスト
  5. ドラッグアンドドロップ
  6. 型
  7. 外部のアプリケーションを起動
  8. WPF/XAML
もっと見る
最近更新されたページ
  • 4957日前

    Bukkit
  • 4963日前

    トップページ
  • 4984日前

    メニュー
  • 4994日前

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

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

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

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

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

    .NET/WinUSB
  • 5053日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. WPF/コンポーネント/コントロール/テキストボックス/バリデーション
  2. VisualStudio/拡張機能
  3. WPF/コンポーネント/コントロール/データグリッド
  4. .NET/ユニットテスト
  5. ドラッグアンドドロップ
  6. 型
  7. 外部のアプリケーションを起動
  8. WPF/XAML
もっと見る
最近更新されたページ
  • 4957日前

    Bukkit
  • 4963日前

    トップページ
  • 4984日前

    メニュー
  • 4994日前

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

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

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

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

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

    .NET/WinUSB
  • 5053日前

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

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

  1. R.E.P.O. 日本語解説Wiki
  2. VCR GTA3まとめウィキ
  3. ドタバタ王子くん攻略サイト
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. STAR WARS ジェダイ:サバイバー攻略 @ ウィキ
  6. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  7. アサシンクリードシャドウズ@ ウィキ
  8. パズル&コンクエスト(Puzzles&Conquest)攻略Wiki
  9. ドラゴンボール Sparking! ZERO 攻略Wiki
  10. SYNDUALITY Echo of Ada 攻略 ウィキ
もっと見る
人気Wikiランキング

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

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

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

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  3. 発車メロディー変更履歴 - 発車メロディーwiki
  4. クエスト - oblivion xbox360 Wiki
  5. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  6. 雑談・交流掲示板 - 星の翼(Starward) 日本語wiki @ ウィキ
  7. ロスサントス警察 - ストグラ まとめ @ウィキ
  8. SCP-8045 - アニヲタWiki(仮)
  9. 魔法屋 - oblivion xbox360 Wiki
  10. 乗り物一覧 - Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る

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

2019 AtWiki, Inc.