次の方法で共有


extern (C# リファレンス)

extern修飾子を使用して、外部で実装されるメソッドを宣言します。 extern修飾子の一般的な用途は、相互運用サービスを使用してアンマネージ コードを呼び出すときに、DllImport属性を使用することです。 この場合は、次の例に示すように、メソッドを staticとして宣言する必要もあります。

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

extern キーワードを使用して、外部アセンブリエイリアスを定義することもできます。 このエイリアスを使用すると、1 つのアセンブリ内から同じコンポーネントのさまざまなバージョンを参照できます。 詳細については、「extern エイリアス」を参照してください。

C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。

このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。

ヒント

C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。

抽象修飾子とextern修飾子を一緒に使用して同じメンバーを変更すると、エラーになります。 extern修飾子を使用すると、メソッドは C# コードの外部で実装されますが、abstract修飾子を使用すると、メソッドの実装がクラスで提供されていないことを意味します。

extern キーワードは、C++ よりも C# での使用が制限されています。 C# のキーワードと C++ のキーワードを比較するには、C++ 言語リファレンスの「extern を使用したリンケージの指定」を参照してください。

この例では、ユーザーの入力したメッセージをプログラムが受け取って、メッセージ ボックスに表示します。 このプログラムは、User32.dll ライブラリからインポートされた MessageBox メソッドを使用します。

//using System.Runtime.InteropServices;
class ExternTest
{
    [DllImport("User32.dll", CharSet=CharSet.Unicode)]
    public static extern int MessageBox(IntPtr h, string m, string c, int type);

    static int Main()
    {
        string myString;
        Console.Write("Enter your message: ");
        myString = Console.ReadLine();
        return MessageBox((IntPtr)0, myString, "My Message Box", 0);
    }
}

この例は、C ライブラリ (ネイティブ DLL) を呼び出す C# プログラムを示しています。

  1. 次の C ファイルを作成し、cmdll.c という名前を付けます。

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Visual Studio インストール ディレクトリから Visual Studio x64 (または x86) Native Tools コマンド プロンプト ウィンドウを開き、コマンド プロンプトで「cl -LD cmdll.c」と入力してcmdll.c ファイルをコンパイルします。

  3. 同じディレクトリに、次の C# ファイルを作成し、cm.cs という名前を付けます。

    // cm.cs
    using System;
    using System.Runtime.InteropServices;
    public class MainClass
    {
        [DllImport("Cmdll.dll")]
          public static extern int SampleMethod(int x);
    
        static void Main()
        {
            Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
        }
    }
    
  4. Visual Studio インストール ディレクトリから Visual Studio x64 (または x86) Native Tools コマンド プロンプト ウィンドウを開き、次のように入力して cm.cs ファイルをコンパイルします。

    csc cm.cs (x64 コマンド プロンプトの場合) または csc -platform:x86 cm.cs (x86 コマンド プロンプトの場合)

    このコマンドにより、実行可能ファイル cm.exeが作成されます。

  5. cm.exe を実行します。 SampleMethod メソッドは、DLL ファイルに値 5 を渡します。DLL は 10 で乗算した値を返します。 このプログラムの出力は、次のようになります。

    SampleMethod() returns 50.
    

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目