次の方法で共有


extern (C# リファレンス)

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

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

extern キーワードでは、外部アセンブリのエイリアスも定義できます。これにより、単一アセンブリ内から 1 つのコンポーネントの複数バージョンを参照できます。 詳細については、「extern エイリアス (C# リファレンス)」を参照してください。

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

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

使用例

例 1. この例では、ユーザーの入力したメッセージをプログラムが受け取って、メッセージ ボックスに表示します。 このプログラムは、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);
        }

    }

例 2. この例は、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 (または x32) 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));
   }
}

3. Visual Studio のインストール ディレクトリから Visual Studio x64 (または x32) Native Tools コマンド プロンプト ウィンドウを開き、次のように入力して cm.cs ファイルをコンパイルします。

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

これで、実行可能ファイル cm.exe が作成されます。

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

SampleMethod() returns 50.

C# 言語仕様

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

参照

関連項目

C# のキーワード

修飾子 (C# リファレンス)

DllImportAttribute

概念

C# プログラミング ガイド

その他の技術情報

C# リファレンス